给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的一个字母异位词。
示例 1:
输入: s = "anagram", t = "nagaram" 输出: true
示例 2:
输入: s = "rat", t = "car" 输出: false
说明:
你可以假设字符串只包含小写字母。
解:看到这个题,想到的就是判断两个字符串中的字母及其数量是否相同,我的想法是用两个map容器分别存储两个字符串中字母及其出现的次数,若两个map完全相等则肯定互为字母异位词。不过可以先判断两个字符串长度是否相同,若长度都不同那肯定是false。代码如下:
bool isAnagram(string s, string t) {
if(s.length()!= t.length())
return false;
map<char,int> a, b;
for (int i = 0; i < s.length(); i++) {
auto it = a.find(s[i]);
if (a.find(s[i]) == a.end()) {
a.insert(make_pair(s[i], 1));
}
else
it->second++;
}
for (int i = 0; i < t.length(); i++) {
auto it = b.find(t[i]);
if (b.find(t[i]) == b.end()) {
b.insert(make_pair(t[i], 1));
}
else
it->second++;
}
if (a == b)
return true;
else return false;
}
不过这个方法虽然思路简单却不是一个高效的算法。