242. 有效的字母異位詞 - 力扣(LeetCode)
題目描述
代碼解決以及思路
這個方法的時間復雜度為O(N),其中N是字符串的長度,空間復雜度為O(1)(因為輔助數組的大小是固定的26)。
class Solution {
public:bool isAnagram(string s, string t) {// 創建一個大小為26的整數數組,用于存儲每個字母的出現次數int hash[26] = {0};// 遍歷字符串s,將每個字母的出現次數記錄在hash數組中for (int i = 0; i < s.size(); i++) {// 并不需要記住字符'a'的ASCII值,只需要求出一個相對數值即可hash[s[i] - 'a']++;}// 遍歷字符串t,將每個字母的出現次數從hash數組中減去for (int i = 0; i < t.size(); i++) {hash[t[i] - 'a']--;}// 檢查hash數組,如果有任何一個位置不為0,說明兩個字符串不是字母異位詞for (int i = 0; i < 26; i++) {if (hash[i] != 0) {return false; // 發現字母計數不匹配,返回false}}// 所有字母計數都為0,說明兩個字符串是字母異位詞,返回truereturn true;}
};
isAnagram
函數接受兩個字符串s
和t
作為參數,并返回一個布爾值,指示這兩個字符串是否為字母異位詞。
函數使用一個長度為26的整型數組hash
來存儲每個字符(假設為小寫字母)的出現次數。數組的每個索引對應于一個字母(例如,索引0對應于’a’,索引1對應于’b’,依此類推)。
首先,遍歷字符串s
,對于每個字符,將其ASCII碼值減去’a’的ASCII碼值,得到一個相對數值,然后增加數組hash
中對應索引的計數。
接著,遍歷字符串t
,對于每個字符,執行相同的操作,但減少數組hash
中對應索引的計數。
最后,遍歷數組hash
,檢查所有計數是否為零。如果所有計數都為零,則說明兩個字符串包含相同的字符,且每個字符的出現次數相同,因此它們是字母異位詞,函數返回true
。如果任何計數不為零,則說明兩個字符串不是字母異位詞,函數返回false
。