class Solution: def isAnagram(self, s: str, t: str) -> bool: s_list = [0 for _ in range(26)] for i in s: index = ord(i) - ord('a') s_list[index] += 1 for i in t: index = ord(i) - ord('a') s_list[index] -= 1 for i in s_list: if i != 0: return False return True
字典写法
注意需要使用 get(i, 0) 方法,如果没有对应的键值,则返回 0。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
class Solution: def isAnagram(self, s: str, t: str) -> bool: record = {} for i in s: record[i] = record.get(i, 0) + 1 for i in t: record[i] = record.get(i, 0) - 1 for i in record: if record[i] != 0: return False return True
Counter 写法
可以直接比较两个 Counter(计数器 dict)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
class Solution: def isAnagram(self, s: str, t: str) -> bool: record_s = Counter() record_t = Counter() for i in s: record_s[i] += 1 for i in t: record_t[i] += 1 if record_s == record_t: return True else: return False
class Solution: def judge(self, s, t): record_s = Counter() record_t = Counter() for i in s: record_s[i] += 1 for i in t: record_t[i] += 1 if record_s == record_t: return True else: return False
def groupAnagrams(self, strs: List[str]) -> List[List[str]]: res = []
for s in strs: if len(res) == 0: res.append([s]) else: flag = False for index in range(len(res)): if self.judge(s, res[index][0]): res[index].append(s) flag = True break if flag == False: res.append([s]) return res
def judge(self, s, t): ss = "".join(sorted(s)) tt = "".join(sorted(t))
if ss == tt: return True else: return False
def findAnagrams(self, s: str, p: str) -> List[int]: res = [] pre = None for start in range(len(s) - len(p) + 1): end = start + len(p) if pre == None: if self.judge(s[start:end], p): res.append(start) pre = s[start] else: if pre == s[end - 1]: res.append(start) pre = s[start] else: pre = None return res