給定兩個字符串?s
?和?t
?,編寫一個函數來判斷?t
?是否是?s
?的?字母異位詞。
示例?1:
輸入: s = "anagram", t = "nagaram" 輸出: true
示例 2:
輸入: s = "rat", t = "car" 輸出: false
提示:
1 <= s.length, t.length <= 5 * 104
s
?和?t
?僅包含小寫字母
題目分析
這道題要求我們判斷倆個字符串是否為字母異位詞,我們可以理解為判斷字母在倆個字符串中出現的次數是否相同,則我們可以考慮用哈希表。
解題思路
首先我們判斷倆個字符串的長度是否相等,如果不相等我們可以直接判斷他們倆不相等,因為在倆個字符串中只存在小寫字母,所以我們考慮用小寫字母的ASCII值來代表各個小寫字母的索引,并使每個索引代表的值均為0,然后先遍歷第一個字符串,如果遍歷到哪個字母,就給相應的索引對應的值+1,然后遍歷第二個字符串,給遍歷到的字母對應的索引對應的值-1,如果倆個字符串是字母異位詞,則遍歷完后索引值對應的值應該變回初始值0,如果不同,在第二次遍歷的時候,一定會有對應值小于0,便可以得出結果。
bool isAnagram(char* s, char* t) {int len_s = strlen(s), len_t = strlen(t);if(len_s != len_t) {return false;}int table[26];memset (table, 0, sizeof(table));for(int i = 0; i < len_s; ++i) {table[s[i] - 'a']++;}for(int i = 0; i < len_t; ++i) {table[t[i] - 'a']--;if(table[t[i] - 'a'] < 0) {return false;}}return true;
}