天天看点

剑指offer032---有效的变位词(简单难度)题目概述(简单难度)思路与代码

目录

  • 题目概述(简单难度)
  • 思路与代码
    • 思路展现
    • 代码示例
      • 代码解析

题目概述(简单难度)

剑指offer032---有效的变位词(简单难度)题目概述(简单难度)思路与代码

题目链接:

点我进入leetcode

思路与代码

思路展现

这道题目我们使用哈希

剑指offer032---有效的变位词(简单难度)题目概述(简单难度)思路与代码

代码示例

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;

    }
}
           
剑指offer032---有效的变位词(简单难度)题目概述(简单难度)思路与代码

代码解析

这道题目我认为比较巧妙的是运用了getOrDefault方法,因为这个方法首先运用在s字符串的时候是为了先给s这个字符串中的每个字符赋值给一个初始的value值,为0,方便后期对每个字符的计数

第二次使用我们的getOrDefault方法是在t中,因为之前我们已经统计了s中每个字符出现的次数,如果t中的每个字符都在s中出现过且次数相同,那么我们在t中使用getOrDefault方法的时候肯定不会获得0值,因为getOrDefault方法只有在key值也就是当前hash中没有某个字符的时候才会默认付给这个字符一个值为0的value,所以说有了我们后面的判断,当这个count为0的时候,直接返回false,说明t中一定有s中没有的字符,不符合题意.