1 示例 1: 2 3 输入: s = "anagram", t = "nagaram" 4 输出: true 5 示例 2: 6 7 输入: s = "rat", t = "car" 8 输出: false
说明: 你可以假设字符串只包含小写字母。
进阶: 如果输入字符串包含 unicode
字符怎么办?你能否调整你的解法来应对这种情况?
下面看下面大神的操作:
首先说一下sorted/sort的用法:
基本排序,调用sorted()函数即可放回一个新的已排序列表,如果你不需要原列表亦可以使用list.sort()实现,他直接修改原列表,效率会比sorted()高。
1 sorted([5, 2, 3, 1, 4]) #[1, 2, 3, 4, 5] 2 a = [5, 2, 3, 1, 4] #a.sort() [1, 2, 3, 4, 5]
另外一个区别是, list.sort()
方法只是为列表定义的,而 sorted()
函数可以接受任何可迭代对象。
1 sorted({1: 'D', 2: 'B', 3: 'B', 4: 'E', 5: 'A'}) #[1, 2, 3, 4, 5]
题解1:
通过将 s 的字母重新排列成 t 来生成变位词。因此,如果 T 是 S 的变位词,对两个字符串进行排序将产生两个相同的字符串。此外,如果 s 和 t 的长度不同 t 不能是 s 的变位词,我们可以提前返回。
1 #排序 2 class Solution(object): 3 def isAnagram(self, s, t): 4 """ 5 :type s: str 6 :type t: str 7 :rtype: bool 8 """ 9 if len(s) != len(t): 10 return False 11 if sorted(s) != sorted(t): 12 return False 13 return True
题解2:
-
为了检查 t 是否是 s 的重新排列,我们可以计算两个字符串中每个字母的出现次数并进行比较。因为 S 和 T 都只包含 A−Z 的字母,所以一个简单的 26 位计数器表就足够了。
-
我们需要两个计数器数表进行比较吗?实际上不是,因为我们可以用一个计数器表计算 s 字母的频率,用 t 减少计数器表中的每个字母的计数器,然后检查计数器是否回到零。
1 #哈希 2 #标准字典包括setdefault方法()获取一个值,如果值不存在,建立一个默认。相比之下,defaultdict允许调用者在初始化时预先设置默认值。 3 class Solution(object): 4 def isAnagram(self, s, t): 5 """ 6 :type s: str 7 :type t: str 8 :rtype: bool 9 """ 10 if len(s) != len(t): 11 return False 12 dicts = collections.defaultdict(int) 13 for i in range(len(s)): 14 dicts[s[i]] = dicts[s[i]] + 1 15 dicts[t[i]] = dicts[t[i]] - 1 16 for val in dicts.values(): 17 if val != 0: 18 return False 19 return True
初学者
分享及成功,你的报应就是我,记得素质三连!
来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/valid-anagram