解题思路
对比两个字符串中各字母的出现次数,若26个字母的出现次数对应相等,则两个字符串互为变位词
具体做法
- 分别给两个字符串设置两个26位的计数器
- 分别检测两个字符串中各字母出现的次数,即用ord(s[i])-ord(‘a’)来得到s字符串中第i个字母的值i,例如:i为字母a,则值为0,因为a是26个字母中排在第0个
- 逐位判断两个计数器是否相等
ord() 函数是 chr() 函数(对于8位的ASCII字符串)或 unichr() 函数(对于Unicode对象)的配对函数,它以一个字符(长度为1的字符串)作为参数,返回对应的 ASCII 数值,或者 Unicode 数值,如果所给的 Unicode 字符超出了你的 Python 定义范围,则会引发一个 TypeError 的异常。
来自菜鸟教程:https://www.runoob.com/python/python-func-ord.html#:~:text=ord()%20%E5%87%BD%E6%95%B0%E6%98%AFchr,%E4%BC%9A%E5%BC%95%E5%8F%91%E4%B8%80%E4%B8%AATypeError%20%E7%9A%84
代码及讲解参考:数据结构与算法(2.4.1)
代码
class Solution:
def isAnagram(self, s: str, t: str) -> bool:
c1 = [0]*26
c2 = [0]*26
for i in range(len(s)):
pos = ord(s[i])-ord('a')
c1[pos] = c1[pos] + 1
for i in range(len(t)):
pos = ord(t[i])-ord('a')
c2[pos] = c2[pos] + 1
j = 0
stillOK = True
while j < 26 and stillOK:
if c1[j] == c2[j]:
j = j + 1
else:
stillOK = False
return stillOK