242. 有效的字母異位詞

知識點:字串;雜湊表

題目描述

給定兩個字串 s 和 t ,編寫一個函式來判斷 t 是否是 s 的字母異位詞。

注意:若 s 和 t 中每個字元出現的次數都相同,則稱 s 和 t 互為字母異位詞。

示例
輸入: s = "anagram", t = "nagaram"
輸出: true 輸入: s = "rat", t = "car"
輸出: false

解法一:排序

直接將兩個字串轉化為字元陣列,然後呼叫API排序,這樣從前到後應該都是一樣的。

class Solution {
public boolean isAnagram(String s, String t) {
if(s.length() != t.length()) return false;
char[] chars = s.toCharArray();
char[] chart = t.toCharArray();
Arrays.sort(chars);
Arrays.sort(chart);
//或者可以直接呼叫比較方法判斷兩個陣列是否相等;
//Arrays.equals(chars,chart);
int i = 0;
while(i < s.length()){
if(chars[i] != chart[i]) return false;
else i++;
}
return true;
}
}

解法二:雜湊表

使用雜湊表儲存第一個字串中每個字元出現的次數,然後遍歷第二個字串,如果出現新的,直接0-1,如果是有那個字元,那就那個字元的值-1,所以最後只要出現了-1那就false;

class Solution {
public boolean isAnagram(String s, String t) {
if(s.length() != t.length()) return false;
Map<Character, Integer> map = new HashMap<>();
for(Character c : s.toCharArray()){
map.put(c, map.getOrDefault(c, 0)+1);
}
for(Character c : t.toCharArray()){
map.put(c, map.getOrDefault(c, 0)-1); //有的話其值-1,沒有的話直接-1;
if(map.get(c) < 0) return false;
}
return true;
}
}