题目
给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词。
示例 1:
输入: s = "anagram", t = "nagaram"
输出: true
示例 2:
输入: s = "rat", t = "car"
输出: false
说明:
你可以假设字符串只包含小写字母。
进阶:
如果输入字符串包含 unicode 字符怎么办?你能否调整你的解法来应对这种情况?
思路
哈希表
先遍历一遍字符串s,将s中每个字符及其对应的次数存入哈希表中,然后遍历一遍字符串t,判断是否存在字符串s中,不存在返回false,遍历结束后判断哈希表中是否有剩余,有返回False
时间复杂度:O(n) 遍历字符串的时间
空间复杂度:O(n)
python
class Solution:
def isAnagram(self, s: str, t: str) -> bool:
sets = {}
for c in s:
if c in sets:
sets[c] += 1
else:
sets[c] = 1
for c in t:
if c in sets:
sets[c] -= 1
if sets[c] == 0:
sets.pop(c)
else:
return False
if len(sets) != 0:
return False
return True
c++
class Solution {
public:
bool isAnagram(string s, string t) {
if(s.size() != t.size()) return false;
unordered_map<char, int> map;
for(char c : s) map[c] ++;
for(char c : t)
if(-- map[c] == -1) return false;
return true;
}
};