-
解法1: 双重for循环判断,要加标志位防止重复字符
-
解法2(T22% S5%): 字符串排序之后比较
- 字符串要转列表才能排序,这里可能比较耗资源,但转为列表之后不用再转回字符串,可以直接开始比较
# 字符串排序再转回字符串 s = ''.join(sorted(list(s)))
-
解法3: 构建字典,字符作为key,有某个字符就++,最后一次循环来判断
- 改进(T90% S100%):只用一个字典,看第一个字符串时+,看第二个字符串时-,最后看字典里是不是全零
无论对于哪种方法,都可能存在鸡尾酒排序类似的问题,可能前面都一样,只有最后一位不一样,当然也可能中间某个位置不一样
一个解决方法是 产生一个随机置换来做最后的比较;或者一上来就对两个字符串进行一个打乱
概率可以很好的解决这个问题
class Solution(object):
def isAnagram(self, s, t):
"""
:type s: str
:type t: str
:rtype: bool
"""
if len(s) != len(t):
return False
D = {}
for l in s:
if l in D:
D[l] += 1
else:
D[l] = 1
for l in t:
if l in D:
D[l] -= 1
else:
return False
for k, v in D.items():
if v > 0:
return False
return True
def otherSolution(self, s, t):
# 解法2
if len(s) != len(t):
return False
# s = ''.join(sorted(list(s)))
for l_s, l_t in zip(sorted(list(s)), sorted(list(t))):
if l_s != l_t:
return False
return True