题目:
- 给定两个字符串
s
和t
,编写一个函数来判断t
是否是s
的字母异位词。注意: 若s
和t
中每个字符出现的次数都相同,则称s
和t
互为字母异位词。
示例:
- 输入: s = “ a n a g r a m ” , t = “ n a g a r a m ” s = “anagram”, t = “nagaram” s=“anagram”,t=“nagaram”
- 输出: t r u e true true
解题思路:
利用哈希表,遍历两个字符串,分别统计字符出现的次数。然后再遍历一遍,检查两个字符串中字符出现的次数是否相同。
C++版
class Solution {
public:
bool isAnagram(string s, string t) {
unordered_map<char, int> sMap;
unordered_map<char, int> tMap;
if(s.size() != t.size()) return false;
for(int i = 0; i < s.size(); i++){
sMap[s[i]]++;
tMap[t[i]]++;
}
for(int i = 0; i < s.size(); i++){
if(sMap[s[i]] != tMap[s[i]]) return false;
}
return true;
}
};
解题思路二:
先创建一个长度为26
的数组,用来存放26
个英文字符对应的索引位置。先遍历s
串,每遍历一个字符,就在数组对应位置加一,代表字符出现次数。再遍历t
串,每遍历一个字符,就在数组对应位置减一。最后再遍历一遍数组,如果数组中存在非0
元素,则返回false
,否则返回true
。
class Solution {
public:
bool isAnagram(string s, string t) {
int record[26] = {0};
for(int i = 0; i < s.size(); i++) record[s[i] - 'a'] ++;
for(int i = 0; i < t.size(); i++) record[t[i] - 'a'] --;
for(int i = 0; i < 26; i++) if(record[i]) return false;
return true;
}
};