目录
题目概述(简单难度)
题目链接:
思路与代码
思路展现
这道题目我们使用哈希
代码示例
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中没有的字符,不符合题意.