Easy 409 - Longest Palindrome
In this blog I will share a solution to the Longest Palindrome problem.
題目連結
難度:Easy
- 給定一個由大小寫英文字母組成的字串 s,找出可以用這些字母組成的最長回文字串長度
- 字母區分大小寫,例如
Aa
不是回文字串。
限制
- 1 <= s.length <= 2000
- s 只包含大小寫英文字母
Hash Table
String
Greedy
解題思路
什麼是回文字串?
回文字串就像是鏡子的倒影,從左讀到右和從右讀到左都一樣。
例如:"abba"
, "racecar"
, "noon"
回文字串的特性
- 大部分的字母都要成對出現
- 最多可以有一個字母出現在中間
解題步驟 (使用 Set 解法)
- 使用 Set 追蹤未配對的字母
- 尋找字母配對
當遇到字母時:
- 如果 Set 中已有這個字母 -> 找到一對! (例如: aa -> 可以放在兩邊)
- 如果是新字母 -> 加入 Set 等待配對 (例如: 第一個 a -> 先存起來)
- 處理中心點
最後檢查 Set:
- 如果 Set 不是空的 -> 可以選一個字母當中心點 (例如: b -> 放中間)
- 如果 Set 是空的 -> 不需要中心點 (例如: "aa" -> 直接配對)
舉個例子
複雜度分析
- 時間複雜度: O(n)
- 只需遍歷字串一次
- Set 的操作 (add/delete/has) 都是 O(1)
- 空間複雜度: O(1)
- Set 最多存 52 個字母 (26 大寫 + 26 小寫)
- 不會隨著輸入字串長度增加而增加