天天看點

劍指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中沒有的字元,不符合題意.