题目描述
给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的一个字母异位词。
示例 1:
输入: s = "anagram", t = "nagaram" 输出: true
示例 2:
输入: s = "rat", t = "car" 输出: false
说明:
你可以假设字符串只包含小写字母。
进阶:
如果输入字符串包含 unicode 字符怎么办?你能否调整你的解法来应对这种情况?
问题分析
先判断两个字符串是否长度相同,如果不同返回false。然后将字符串s的每一个字符都加入哈希map。然后遍历字符串t,将t的每一个字符取出,并在哈希map中减1。由于两个字符串的长度相同,如果两个字符串不是字母异位词,那么t中一定有某字符的个数是多于s中该字符的。所以会出现哈希map减1后小于0的现象,这时我们返回false。如果for循环结束后仍未返回,那么两个字符串是字母异位词,返回true。
代码实现
class Solution {
public:
bool isAnagram(string s, string t) {
if(s.size() != t.size())
return false;
unordered_map<char, int> umap;
for(char c : s)
++umap[c];
for(char c : t){
--umap[c];
if(umap[c] < 0)
return false;
}
return true;
}
};