题目:两个字符串长度相同,都是由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'))
京公网安备 11010502036488号