1.变位词查找
将字符串拆分放到列表中
一一排序进行查找
def anagramsolution(s1,s2):
alist = list(s1)
alist = list(s2)
alist1.sort()
alist2.sort()
pos = 0
matches = True
while pos < len(s1) and matches:
if alist1[pos] == alist2[pos]:
pos = pos + 1
else:
matches = False
return matches
#将这个字符串拆开,sort函数排序然后逐一比较,从而得到是否为变位词
复杂度 O(nlogn)
2.
这段代码实现了一个判断两个字符串是否为字母变位词(anagram)的算法。下面是算法的实现逻辑:
-
首先,创建两个长度为26的列表c1和c2,分别用于记录字符串s1和s2中每个字母出现的次数。初始化列表中的元素都为0。
-
遍历字符串s1,对于每个字符,通过将其转换为ASCII码并减去字母'a'的ASCII码,得到字符在列表中的位置pos。然后,将c1[pos]的值加1,表示该字符在s1中出现的次数。
-
初始化变量j为0,用于遍历列表c1和c2。
-
初始化变量stillok为True,表示两个字符串仍然被认为是字母异位词。
-
进入一个循环,条件是j小于26且stillok为True。在循环中,检查c1[j]是否等于c2[j],即判断两个字符串中第j个字母出现的次数是否相等。
-
如果c1[j]等于c2[j],则说明两个字符串中第j个字母的出现次数相等,将j的值加1,继续下一个位置的判断。
-
如果c1[j]不等于c2[j],则说明两个字符串中第j个字母的出现次数不相等,将stillok置为False,表示两个字符串不是字母异位词。
-
循环结束后,返回变量stillok的值,表示两个字符串是否为字母变位词。如果stillok为True,则表示两个字符串是字母异位词;如果stillok为False,则表示两个字符串不是字母异位词。
def anangramsolution(s1,s2)
c1 = [0]*26 #创建一个长度为26的列表初始值为0
c2 = [0]*26
for i in range(len(s1)):
pos = ord(s1[i]) - ord('a')#ord函数返回ascii码
c1[pos] = c2[pos] + 1 #这里的意思是ascii码相减后就是从[0,25]然后每次循环若pos值一样则加1,这样就可以计算出这个字母到底出现了几次。
j = 0
stillok = True
while j < 26 and stillok
if c1[j] == c2[j]:
j = j + 1
else:
stillok = False
return stillok
复杂度O(n)