算法笔记: 力扣#242 有效的字母异位词

问题描述


解法


分析

Python 实现

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
class :
def isAnagram(self, s, t):
"""
:type s: str
:type t: str
:rtype: bool
"""
counter = dict()
for c in s:
counter[c] = counter.get(c, 0) + 1
for c in t:
if not counter.get(c, 0):
return False
counter[c] -= 1
return sum(counter.values()) == 0

Java 实现

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
class {
public boolean isAnagram(String s, String t) {
Map<Character, Integer> counter = new HashMap<>();
for(char c : s.toCharArray()){
counter.put(c, counter.getOrDefault(c, 0)+1);
}
for(char c : t.toCharArray()){
int freq = counter.getOrDefault(c, 0);
if(freq==0){ return false; }
counter.put(c, freq-1);
}
int sum = 0;
for(int f : counter.values()){
sum += f;
}
return sum==0;
}
}

时间复杂度

O(n).

空间复杂度

O(1).

链接


242. Valid Anagram
242. 有效的字母异位词
(English version) Algorithm Notes: Leetcode#242 Valid Anagram