242. 有效的字母異位詞(java實現)--LeetCode
阿新 • • 發佈:2020-12-19
技術標籤:演算法題HashMap演算法題leetcode演算法java
文章目錄
題目
給定兩個字串 s 和 t ,編寫一個函式來判斷 t 是否是 s 的字母異位詞。
示例 1:
輸入: s = "anagram", t = "nagaram"
輸出: true
示例 2:
輸入: s = "rat", t = "car"
輸出: false
說明:
你可以假設字串只包含小寫字母。
進階:
如果輸入字串包含 unicode 字元怎麼辦?你能否調整你的解法來應對這種情況?
解法1:排序
/**
* 思路:
* 簡單過濾:看兩個字串長度是否一致
* 轉換成字元陣列
* 排序
* 比較陣列
*/
public boolean isAnagram(String s, String t) {
if (s.length()!=t.length())return false;
char[] s1 = s.toCharArray();
char[] t1 = t.toCharArray();
Arrays.sort (s1);
Arrays.sort(t1);
return Arrays.equals(s1,t1);
}
時間複雜度:Onlogn
空間複雜度:On
解法2:陣列
/**
* 思路:
* 簡單過濾:看兩個字串長度是否一致
* 陣列長度26,代表26個字母
* 遍歷s和t,s中的字母在陣列上++,t中的字母--
* 最後遍歷陣列,如果有不是0的就不為有效字母異位詞
*/
public boolean isAnagram(String s, String t) {
if (s.length()!=t.length() )return false;
int[] arr=new int[26];
for (char c:s.toCharArray()){
arr[c-'a']++;
}
for (char c:t.toCharArray()){
arr[c-'a']--;
}
for (int i:arr)if (i!=0)return false;
return true;
}
時間複雜度:On
空間複雜度:O1
解法3:HashMap
/**
* 思路:
* 簡單過濾:看兩個字串長度是否一致
* map中存放26個字母,以及出現的次數
* s中出現++,t中出現--
* 最後看map中的每個key的value是否為0
*/
public boolean isAnagram(String s, String t) {
if (s.length()!=t.length())return false;
HashMap<Character, Integer> map = new HashMap<>();
for (char c='a';c<='z';c++)map.put(c,0);
for (int i=0;i<s.length();i++){
map.put(s.charAt(i),map.get(s.charAt(i))+1);
map.put(t.charAt(i),map.get(t.charAt(i))-1);
}
for (int i:map.values())if (i!=0)return false;
return true;
}
時間複雜度:On
空間複雜度:On
解法4:HashMap(暴力)
/**
* 思路:
* 將字串轉換為字元陣列
* 儲存每個字元的次數在map中
* 對比map中的數是否相同
*/
public boolean isAnagram(String s, String t) {
HashMap<Character, Integer> s_map = new HashMap<>();
HashMap<Character, Integer> t_map = new HashMap<>();
char[] s_chars = s.toCharArray();
char[] t_chars = t.toCharArray();
for (char c:s_chars){
if (s_map.containsKey(c)) {
s_map.put(c, s_map.get(c) + 1);
}else {
s_map.put(c, 1);
}
}
for (char c:t_chars){
if (t_map.containsKey(c)) {
t_map.put(c, t_map.get(c) + 1);
}else {
t_map.put(c, 1);
}
}
if (s_map.size()!=t_map.size())return false;
for (Character c:s_map.keySet()){
if (!t_map.containsKey(c)||!s_map.get(c).equals(t_map.get(c)))return false;
}
return true;
}
時間複雜度:On
空間複雜度:On