题目:两个字符串长度相同,都是由26 个小写字母组成。需要编写一个判断两个字符串是否是一对变位词的布尔函数,返回真假。
1.基本的解法:一个个单词进行匹配,不对就移动到下一个。
def solution(s1,s2): a_list=list(s2) pos1=0 still_ok=True while pos1<len(s1) and still_ok: pos2=0 found=False while pos2<len(a_list) and not found: if s1[pos1] == a_list[pos2]: found=True else: pos2 += 1 if found: a_list[pos2]=None else: still_ok=False pos1 += 1 return still_ok print(solution('abcd','dcb'))
2.计数比较法:计算每一个字符在字符串中出现的次数,如果这两个计数器列表相同,则这两个字符串是变位词。
def solution(s1,s2): c1=[0]*26 c2=[0]*26 for i in range(len(s1)): pos=ord(s1[i])-ord('a') #pos=0,表示a;pos=1,表示b;...pos=25,表示z c1[pos]=c1[pos]+1 # for i in range(len(s2)): pos=ord(s2[i])-ord('a') c2[pos]=c2[pos]+1 j=0 still_ok=True while j<26 and still_ok: if c1[j]==c2[j]: j=j+1 else: still_ok=False return still_ok print(solution('apple','pleap'))