目录
- 题目概述(简单难度)
- 思路与代码
-
- 思路展现
- 代码示例
-
- 代码解析
题目概述(简单难度)
题目链接:
点我进入leetcode
思路与代码
思路展现
这道题目我们使用哈希
代码示例
class Solution {
public boolean isAnagram(String s, String t) {
if(s.length() != t.length() || s.equals(t)) {
return false;
}
HashMap<Character,Integer> hash = new HashMap<>();
for(char ch : s.toCharArray()) {
//获取key所对应的value值,如果没有获得默认值,此处我们设置的默认值为0
Integer count = hash.getOrDefault(ch , 0);
hash.put(ch,count + 1);
}
for(char ch1 :t.toCharArray()) {
//获取key所对应的value值,如果没有获得默认值,此处我们设置的默认值为0
//但是注意此处如果s中的字符t中都有,那么此处count的值为0
Integer count = hash.getOrDefault(ch1 , 0);
//一旦在循环获取count的时候发现有一次为0,就说明不是变位词
if(count == 0) {
return false;
}
//遍历 t 中字符,对 s 中的字符进行抵消,如果不能抵消,则说明 t 不是变位词
hash.put(ch1,count - 1);
}
//能走到这一步说明此时都抵消完毕了
return true;
}
}
代码解析
这道题目我认为比较巧妙的是运用了getOrDefault方法,因为这个方法首先运用在s字符串的时候是为了先给s这个字符串中的每个字符赋值给一个初始的value值,为0,方便后期对每个字符的计数
第二次使用我们的getOrDefault方法是在t中,因为之前我们已经统计了s中每个字符出现的次数,如果t中的每个字符都在s中出现过且次数相同,那么我们在t中使用getOrDefault方法的时候肯定不会获得0值,因为getOrDefault方法只有在key值也就是当前hash中没有某个字符的时候才会默认付给这个字符一个值为0的value,所以说有了我们后面的判断,当这个count为0的时候,直接返回false,说明t中一定有s中没有的字符,不符合题意.