📜  门| GATE-CS-2015(套装2)|问题 20(1)

📅  最后修改于: 2023-12-03 15:28:44.429000             🧑  作者: Mango

GATE-CS-2015(套装2)题目20

这是 GATE-CS-2015 套装2 的第20题,涉及到了判断一个字符串是否是另一个字符串的字母重排。

问题描述

给定两个由小写字母组成的字符串 $S_1$ 和 $S_2$,编写一个算法来判断 $S_1$ 是否是 $S_2$ 的字母重排(两个字符串具有相同的字符,但字符出现次数可以不同)。

例如:

  • S1 = "abc",S2 = "bca",返回 true
  • S1 = "abc",S2 = "def",返回 false
解题思路

首先,字母重排必须具有字符相同的特点,那么可以先判断两个字符串的字符集是否相同,如果不相同则返回 false。

其次,我们可以分别对两个字符串进行排序(比如使用快速排序),然后比较排序后的结果是否相同。

最后,如果排序后的结果相同,则说明 S1 是 S2 的字母重排,否则不是。

代码实现

下面是 Python 实现代码片段:

def is_anagram(s1, s2):
    # 如果字符串长度不同,则不可能是字母重排
    if len(s1) != len(s2):
        return False
    
    # 获取字符串的字符集并判断是否相同
    if set(s1) != set(s2):
        return False
    
    # 对字符串进行排序并比较结果
    return sorted(s1) == sorted(s2)

代码中,首先判断两个字符串的长度是否相同,如果不相同则直接返回 false;接着,使用 set 函数分别获取两个字符串的字符集并比较它们是否相同;最后,对两个字符串进行排序并比较结果,如果排序后的结果相同则说明 S1 是 S2 的字母重排,否则不是。

总结

本题考查了字符串的基本操作和排序算法,通过本题可以对这些知识点有更深入的理解。