題目:leetcode242. 有效的字母異位詞
描述:
給定兩個字符串 s 和 t ,編寫一個函數來判斷 t 是否是 s 的字母異位詞。
注意:若 s 和 t 中每個字符出現的次數都相同,則稱 s 和 t 互為字母異位詞。
示例 1:
輸入: s = “anagram”, t = “nagaram”
輸出: true
示例 2:
輸入: s = “rat”, t = “car”
輸出: false
思路:
對于這道題,做一個哈希表來解決是最好的,暴力破解的時間復雜度太高。
首先題目其實是讓我們判斷字符串s和字符串t是否是同一個字符串的不一樣的順序,也就是s字符串打亂順序之后是否可以成為t。
明白了題目要求之后我們就可以做了,首先題目說了可以假定都是小寫字母,那么字母數量就是26個(如果有大寫有小寫,那我們就要設置52個字母數量),設置一個26個空間的整型數組來記錄這個字符串當中出現的字母,遍歷第一個字符串,每個字母-'a’就得到了一個0到25的數字大小,對應數組的下標,最后對應的數組下標的位置做加一操作。
對于第二個字符串也是一樣的求出對應數組的下標,但是做的是減一操作。
做完上述操作之后,檢查哈希數組每個位置是否都是0,如果是則符合規定,如果不是返回false。
代碼:
class Solution {public boolean isAnagram(String s, String t) {int[] hashTable=new int[26]; //26個空間大小來保存26個字母的情況for(int i=0;i<s.length();i++)hashTable[s.charAt(i)-'a']++;for(int i=0;i<t.length();i++)hashTable[t.charAt(i)-'a']--;for(int i:hashTable)if(i!=0)return false;return true;}
}