242.有效的字母異位詞
- 有效的字母異位詞
難度簡單173收藏分享切換爲英文關注反饋
給定兩個字符串 s 和 t ,編寫一個函數來判斷 t 是否是 s 的字母異位詞。
示例 1:
輸入: s = "anagram", t = "nagaram" 輸出: true
示例 2:
輸入: s = "rat", t = "car" 輸出: false
1.依次遍歷比較
思路:異位次的含義是 一個字符串中字母的順序改變,但是個數不變 就是異位詞。
比較長度 如果長度不相等 返回false 然後將兩個字符串進行排序,時間複雜度爲O(logN)
然後進行依次比較 如果不相等直接返回true 不好的一點是 排序使時間複雜度提高了。
time 😮(NlogN)
space:O(1)
//time O(NlogN) space O(n)
public boolean isAnagram(String s, String t) {
//排序後比較
if(s.length() != t.length()){
return false;
}
char [] chs = s.toCharArray();
char [] cht = t.toCharArray();
Arrays.sort(chs);
Arrays.sort(cht);
return Arrays.equals(chs,cht);
}
2.哈希表
思路:如果長度不同 返回false 定義一個數組 26 s.charAt(i)-‘a’ 存儲進數組 對應的下標 t.charAt(i)-‘a’ 不存儲對應的下標。前者++ 後者-- 當最後數組爲0是異位詞,否則不是異位詞。
time:O(n)
space:O(1)
public boolean isAnagram(String s, String t) {
//哈希表
if(s.length() != t.length()){
return false;
}
int [] alpha = new int [26];
for(int i=0;i<s.length();i++){
alpha[s.charAt(i) - 'a']++;
alpha[t.charAt(i) - 'a']--;
}
for(int i=0;i<alpha.length;i++){
if(alpha[i]!=0){
return false;
}
}
return true;
}