給定兩個字符串 s 和 t,判斷 t 是否為 s 的字母異位詞(字符相同、順序不同)。假設只包含小寫字母。
範例:
s = "anagram", t = "nagaram" → true
s = "rat", t = "car" → false
將兩字符串排序,直接比較是否相等。
bool isAnagram(string s, string t) {
sort(s.begin(), s.end());
sort(t.begin(), t.end());
return s == t;
}
時間 O(n log n),空間 O(1) 或 O(n) 視排序實現。
用大小 26 的整型數組記錄每個字母出現次數。
bool isAnagram(string s, string t) {
if (s.size() != t.size()) return false;
int cnt[26] = {0};
for (char c : s) cnt[c - 'a']++;
for (char c : t) {
if (--cnt[c - 'a'] < 0) return false;
}
return true;
}
時間 O(n),空間 O(1)。
若輸入包含 Unicode,改用 unordered_map 計數,邏輯不變。