1.題目
給定兩個字符串
s
和t
,編寫一個函數來判斷t
是否是s
的字母異位詞。注意:若?
s
和t
?中每個字符出現的次數都相同,則稱?s
和t
?互為字母異位詞。
2.示例
s="adasd"
t="daads"
返回true
s="addad"
t ="adddt"
返回true
提示:
1 <= s.length, t.length <= 5 * 104
s
和t
?僅包含小寫字母
3.思路
統計字符:
首先可以通過統計兩者的每一個字符出現的次數進行統計,然后通過遍歷兩者26個字母判斷是否都能相等,如果都能相等則返回true否則為false
4.代碼
LeetCode代碼:
class Solution {public boolean isAnagram(String s, String t) {int count_s[] = new int[26];int count_t[] = new int[26];for (char s_index:s.toCharArray()) {count_s[s_index-'a']++;}for (char t_index:t.toCharArray()) {count_t[t_index-'a']++;}for (int i=0;i<26;i++){if (count_s[i]!=count_t[i]){return false;}}return true;}
}
?可以看到內存管理并不理想,所以可以嘗試將兩個數組結合起來變成一個數組,即為累加數組,在s數組中累加,在t數組中累減。最后通過數組內的元素是否有不為0的元素來判斷返回值
改良后代碼:
?
class Solution {public boolean isAnagram(String s, String t) {int sum[] = new int[26];for (char s_index:s.toCharArray()) {sum[s_index-'a']++;}for (char t_index:t.toCharArray()) {sum[t_index-'a']--;}for (int i=0;i< sum.length;i++){if (sum[i]!=0){return false;}}return true;}
}
詳細案例代碼:
package LeetCode15_1;public class javaDemo {public static void main(String[] args) {String s = "rat";String t = "car";boolean flag = false;
// 創建唯一累加數組int sum[] = new int[26];
// 遍歷s,統計s所有字母的出現次數for (char s_index:s.toCharArray()) {sum[s_index-'a']++;}
// 遍歷t,減去t所有字母出現的次數for (char t_index:t.toCharArray()) {sum[t_index-'a']--;}
// 如果兩者出現次數都一樣,那么數組元素應該全是0for (int i=0;i< sum.length;i++){if (sum[i]!=0){flag = false;break;}}System.out.println(flag);}
}
?會了?試試挑戰下一題!?(^?^●)ノシ (●′?`)?
LeetCode150道面試經典題-- 兩數之和(簡單)_Alphamilk的博客-CSDN博客