变位词:字母相同但位置不同,例如python和typhon、earth和heart
解法一:逐个字母检查,复杂度O(n²),代码省略
解法二:先将字母排序,再比较对应位置的字母。复杂度O(nlogn),由排序决定复杂度
#变位词,先将字母排序,再检查对应位置的字母是否一致
def anagramSolution(s1,s2):
#转为列表
alist1 = list(s1)
alist2 = list(s2)
#分别排序
alist1.sort()
alist2.sort()
#先判断长度是否一致
if(len(s1)!=len(s2)):
return False
pos = 0
matches = True
while pos<len(s1) and matches:
if alist1[pos] == alist2[pos]:
pos += 1
else:
matches = False
return matches
print(anagramSolution('abcd','dcba'))
解法三:对比两个词中每个字母的出现次数,如果26个字母出现的次数相同则为变位词。复杂度O(n)
#变位词,对比两个词中每个字母的次数,如果26个字母出现位置都相同就是变位词
def anagramSolution(s1,s2):
#c1,c2为26个字母出现次数的列表
c1 = [0] * 26
c2 = [0] * 26
for i in range(len(s1)):
#ord()将字符转换为对应的ascii码
pos = ord(s1[i]) - ord('a')
c1[pos] = c1[pos] + 1
for i in range(len(s2)):
pos = ord(s2[i]) - ord('a')
c2[pos] = c2[pos] + 1
stillOK = True
if c1 != c2:
stillOK = False
return stillOK
print(anagramSolution('abc','bca'))
浙公网安备 33010602011771号