题目
给定两个字符串
s
和t
,编写一个函数来判断t
是否是s
的字母异位词。注意:若
s
和t
中每个字符出现的次数都相同,则称s
和t
互为字母异位词。示例 1:
输入: s = "anagram", t = "nagaram" 输出: true示例 2:
输入: s = "rat", t = "car" 输出: false提示:
1 <= s.length, t.length <= 5 * 104
s
和t
仅包含小写字母进阶: 如果输入字符串包含 unicode 字符怎么办?你能否调整你的解法来应对这种情况?
思路
仍然是典型的哈希表题目
1、使用map记录s中字符出现次数
2、遍历d,判断每个字符是否存在map中,如果不存在直接返回false
如果存在且出现次数=1,则从map中移除
如果存在次数>1,map中次数-1
代码
class Solution {
public boolean isAnagram(String s, String t) {
int a = s.length();
int b = t.length();
if(a!=b){
return false;
}
HashMap<Character,Integer> map =new HashMap<>();
for(char c :s.toCharArray()){
map.put(c,map.getOrDefault(c,0)+1);
}
for(char d :t.toCharArray()){
if(!map.containsKey(d)){
return false;
}else{
int time = map.get(d);
if(time==1){
map.remove(d);
}else{
map.put(d,time-1);
}
}
}
return map.isEmpty();
}
}