題目描述:
給定兩個字符串 s 和 t ,編寫一個函數來判斷 t 是否是 s 的字母異位詞。
示例 1:
輸入: s = "anagram", t = "nagaram"
輸出: true
示例 2:
輸入: s = "rat", t = "car"
輸出: false
說明:
你可以假設字符串只包含小寫字母。
題目思路:
以示例一爲例,設爲一個26位的數組,對s數組所在的單詞執行加1操作,t數組所在的單詞執行減1操作。如果數組中有!=0的情況出現,則說明此數組中有異位詞,則返回false。
具體代碼如下所示:
class Solution {
public boolean isAnagram(String s, String t) {
if(s.length() != t.length()){
return false;
}
//設置一個長度爲26的數組。
int[] counter = new int[26];
//每個單詞所在的位置都是0,通過s字符串所在的單詞+1,t字符串所在的單詞-1。如果單獨只有加1或減1的操作。就說明兩個單詞中存在不一樣的單詞。那麼就返回false。否則返回true。
for(int i=0;i<s.length();i++){
counter[s.charAt(i)-'a']++;//s.charAt(i)-'a'是數組所在的位置,如s字符串中第一個字母a所在的位置爲0。counter[0]=a
counter[t.charAt(i)-'a']--;//t.charAt(i)-'a'是數組所在的位置,如t字符串第一個字母n所在的位置爲13 。counter[13]=n
}
//遍歷數組
for(int count:counter){
if(count != 0) return false;
}
return true;
}
}
難點:
爲什麼說counter[i]數組所在的位置都爲0?
一般在數組爲int的情況下,如沒有對數組的位置進行具體的賦值。默認數組各個位置的值爲0。
遍歷數組還有一種方法,如下所示:
for(int i=0;i<26;i++){
if(counter[i] != 0) {
return false;
}
}
兩者之間的for循環語句的思路是一致的。但第一種寫法的for循環語句具有有兩方面的優勢:
1.代碼更加簡潔;
2.對於for循環的使用更加靈活;
3.減少了代碼的內存消耗;
通過以上的表述說明平常在寫代碼的過程中,for循環能用第一種方式來完成就用第一種方式來寫,提高代碼的靈活性。