# 0242 有效的字母异位词
你好啊,我是蓝莓,今天是每日一题的第 20 天。
引用力扣题目:242 有效的字母异位词 (opens new window)
# 题目描述
给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的
字母异位词
。
示例 1:
输入: s = "anagram", t = "nagaram"
输出: true
1
2
2
示例 2:
输入: s = "rat", t = "car"
输出: false
1
2
2
提示:
1 <= s.length, t.length <= 5 * 104s和t仅包含小写字母
# 实现
思路
- 这是一个简单题,可以用来练习使用
map - 我们可以先使用
map统计字符串s中每个字符出现的频率 - 然后,遍历字符串
t,对于t中出现的字符是必须在s中出现相同次数的,每遍历到一个字符,我们就对map中统计到的频率进行减1的操作 - 如果我们发现一个字符在
map中的频率已经小于等于 0 了,那就说明s字符串中的字符的个数不满足要求,就可以直接返回false了
C++ 代码实现
class Solution {
public:
bool isAnagram(string s, string t) {
unordered_map<char, int> record;
// 首先要保证 s 和 t 的长度是一直的才行
if( s.size() != t.size() ) {
return false;
}
for( int i = 0 ; i < s.size() ; i++ ) {
record[s[i]]++;
}
for( int i = 0 ; i < t.size() ; i++ ) {
if( record.find(t[i]) != record.end() && record[t[i]] > 0 ) {
// 匹配的情况下对频率进行减 1 操作
record[t[i]]--;
} else {
// 比匹配的情况下返回 false
return false;
}
}
// 如果字符串 t 已经遍历完了也没有发现不匹配的则说明匹配成功
return true;
}
};
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28