问题描述
我正在尝试解决Python中的问题(检查字符串s
和t
是否是字谜):
算法:
要检查t
是否为s
的重排,我们可以计算两个字符串中每个字母的出现次数并进行比较。由于s
和t
都只包含来自a-z
的字母,因此,大小为26的简单计数器table
就足够了。
我们可以为s
中的每个字母增加计数器,并为t
中的每个字母减少计数器,然后检查计数器是否回到零。
代码:
class Solution:
def isAnagram(self,s: str,t: str) -> bool:
if len(s) != len(t):
return False
table = {}
for i in range(len(s)):
table[s[i]] = table.get(table[s[i]],0) + 1
for i in range(len(t)):
table[t[i]] = table.get(table[s[i]],0) - 1
if table[t[i]] < 0:
return False
return True
但是,我在第一个循环中遇到KeyError。为了解决这个问题,我尝试使用.get()
,但仍然无法解决问题。
我遇到以下错误:
感谢您的帮助。
解决方法
- 在
dict
中寻找价值时,您会查询两次:table.get(table[s[i]],0)
。 -
[]
和.get()
是同义词,除了后者在为空时是安全的并返回默认值。 - 这应该是您需要的循环。归功于@deadshot。
for i in range(len(s)):
table[s[i]] = table.get(s[i],0) + 1
for i in range(len(t)):
table[t[i]] = table.get(t[i],0) - 1
if table[t[i]] < 0:
return False