1.這是一道判斷兩個字符串是否為同元素(打亂順序)的題目。
鏈接:https://leetcode.com/problems/valid-anagram/
242-valid-anagram.JPG
這題的做法有兩種,
第一種:首先將字符串轉(zhuǎn)換成list嗽仪,然后進行排序鳄哭。判斷兩個list是否相同俩檬。O(n)=nlog(n) .(快排)
第二種:
1.建立一個存放26個字母的list萎胰,并將它們值初始化為0;
2.遍歷兩個字符串棚辽,如果在s中有技竟,就對這個list的這個位置加一,如果l中就減一屈藐;
3.最后判斷l(xiāng)ist中的值是否全為0榔组。
2.題解:
方法一:
class Solution(object):
# 1.首先將字符串轉(zhuǎn)換成list,然后進行排序.O(n)=nlog(n) 花在快排上了.
def isAnagram(self, s, t):
if len(s) != len(t):
return False
# 1.轉(zhuǎn)為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循環(huán).O(n)=2n
def isAnagram(self, s, t):
if len(s) != len(t):
return False
# 1.建立空list
L = [0]*26
# 2.根據(jù)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