[每日一题]242. valid-anagram(字典)
2019-04-10 本文已影响0人
何学诚
1.这是一道判断两个字符串是否为同元素(打乱顺序)的题目。
链接:https://leetcode.com/problems/valid-anagram/
242-valid-anagram.JPG这题的做法有两种,
第一种:首先将字符串转换成list,然后进行排序。判断两个list是否相同。O(n)=nlog(n) .(快排)
第二种:
1.建立一个存放26个字母的list,并将它们值初始化为0;
2.遍历两个字符串,如果在s中有,就对这个list的这个位置加一,如果l中就减一;
3.最后判断list中的值是否全为0。
2.题解:
方法一:
class Solution(object):
# 1.首先将字符串转换成list,然后进行排序.O(n)=nlog(n) 花在快排上了.
def isAnagram(self, s, t):
if len(s) != len(t):
return False
# 1.转为list
L_s = list(s)
L_t = list(t)
# 2.对两个list排序
L_s.sort()
L_t.sort()
# 3.判断两个list是否相同
if L_s == L_t:
return True
else:
return False
方法二:
class Solution(object):
# 时间复杂度是两个for循环.O(n)=2n
def isAnagram(self, s, t):
if len(s) != len(t):
return False
# 1.建立空list
L = [0]*26
# 2.根据s和t,对list的值进行加减
for i in range(len(s)):
ascii_s = ord(s[i])-ord('a')
ascii_t = ord(t[i]) - ord('a')
L[ascii_s] += 1
L[ascii_t] -= 1
# return False for i in range(26) if L[i] != 0
# 3.判断是否全为0
for i in range(26):
if L[i] != 0:
return False
return True
3.完整代码
查看链接:
https://github.com/Wind0ranger/LeetcodeLearn/blob/master/4-dict/242-valid-anagram.py