目錄
- 題目概述(簡單難度)
- 思路與代碼
-
- 思路展現
- 代碼示例
-
- 代碼解析
題目概述(簡單難度)
題目連結:
點我進入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中沒有的字元,不符合題意.