Leetcode242: 有效的字母異位詞--hammring

題目描述:

給定兩個字符串 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循環能用第一種方式來完成就用第一種方式來寫,提高代碼的靈活性。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章