LeetCode python-242. 有效的字母异位词
先看题目:
(题目来力扣网站)
思路1
将序列排序,然后对比序列是否相等。
以下两行代码思路相同,但是第二个的运行速度优于第一个的速度。
class Solution:
def isAnagram(self,s,t):
if len(s) != len(t):
return False
sorted(s)
sorted(t)
if sorted(s) == sorted(t):
return True
p = Solution()
s = "anagram"
t = "nagaram"
res = p.isAnagram(s,t)
print(res)
class Solution:
def isAnagram(self, s, t) :
if len(s) != len(t):
return False
return sorted(s) == sorted(t)
p = Solution()
s = "anagram"
t = "nagaram"
res = p.isAnagram(s,t)
print(res)
思路2
利用 Python 的 collections 模块中的 Counter 类,可以统计每个字母出现次数。
通过比较字符串中每个字母个数,来判断bool类型。
from collections import Counter #利用 Python 的 collections 模块中的 Counter 类,可以统计每个字母出现次数
class Solution:
def isAnagram(self, s, t):
return Counter(s) == Counter(t)
p = Solution()
s = "anagram"
t = "nagaram"
res = p.isAnagram(s,t)
print(res)
class Solution:
def isAnagram(self,s, t):
if len(s) != len(t):
return False
list1 = {}
for i in s:
if i not in list1:
list1[i] = 1
else:
list1[i] = list1[i] +1
for j in t:
if j not in s:
return False
else:
list1[i] = list1[i] - 1
if list1[i] == 0:
return True
p = Solution()
res = p.isAnagram("", "")
print(res)
此方法出现错误。这里讲一下具体思路:
① 创建空字典。key:字母;value:字母对应的次数。这里不可以创建空列表,列表的索引是整型或者是切片,不能是字符串。
②遍历字母i并存入list1。字母i在字符串s中,如果i不在s中,则list1中存入list[i]及其对应的次数。如果i在,则次数+1。
③遍历t中的字母j,如果j不在s中,则返回False,如果在s中,则对应字母的次数-1。
④如果list[i] == 0,则证明s=t,返回True。
思路3
①构建两个空字典。分别存入相应的字母及其索引。
②对比是否 list1 = list2,返回相应的bool类型。
class Solution:
def isAnagram(self,s, t):
if len(s) != len(t):
return False
list1 = {}
list2 = {}
for i in s:
if i not in list1:
list1[i] = 1
else:
list1[i] = list1[i] +1
for i in t:
if i not in list2:
list2[i] = 1
else:
list2[i] = list2[i] + 1
if list1 == list2:
return True
p = Solution()
res = p.isAnagram("anagram", "nagaram")
print(res)
收获
①利用 Python 的 collections 模块中的 Counter 类,可以统计每个字母出现次数。
from collections import Counter
②可将函数用具体算法实现。
③list1={}和list1=[]区别