解題說明
Valid Anagram
題目描述:判斷兩個字串 s 和 t 是否為變位詞(使用相同字元,順序不同)。
解題思路:最直接的方法:計算兩個字串中各字元的頻率,若完全相同則為變位詞。用一個大小為 26 的整數陣列:對 s 加一,對 t 減一;最後若陣列全為 0 則是變位詞。或者直接排序兩個字串比較,但需要 O(n log n) 時間。
C++ 解法
複雜度分析
時間複雜度:O(n) — 兩次線性掃描。
空間複雜度:O(1) — 固定大小的計數陣列(26 個字母)。
虛擬碼
1. If len(s) != len(t): return false 2. Count[26] = 0 3. For c in s: count[c]++ 4. For c in t: count[c]--; if count[c] < 0: return false 5. Return true
其他解法
排序 O(n log n):排序兩個字符串,比較是否相等 — 時間複雜度更差。
ASCII 值求和 O(n):計算兩個字符串的字符 ASCII 值之和 — 易被碰撞攻擊,不推薦。
延伸思考
- 若要判斷一個字符串是否為另一個的排列組合?
- 如何計算變成 anagram 需要的最少修改?
- 若支持 Unicode 字符?