給定乙個包含大寫字母和小寫字母的字串,找到通過這些字母構造成的最長的回文串。
在構造過程中,請注意區分大小寫。比如 「aa」 不能當做乙個回文字串。
注意:假設字串的長度不會超過 1010。
示例 1:
輸入:「abccccdd」
輸出:7
解釋:我們可以構造的最長的回文串是"dccaccd", 它的長度是 7。
方法:貪心那麼我們如何通過給定的字元構造乙個回文串呢?我們可以將每個字元使用偶數次,使得它們根據回文中心對稱。在這之後,如果有剩餘的字元,我們可以再取出乙個,作為回文中心。
演算法對於每個字元 ch,假設它出現了 v 次,我們可以使用該字元 v / 2 * 2 次,在回文串的左側和右側分別放置 v / 2 個字元 ch,其中 / 為整數除法。例如若 「a」 出現了 5 次,那麼我們可以使用 「a」 的次數為 4,回文串的左右兩側分別放置 2 個 「a」。
如果有任何乙個字元 ch 的出現次數 v 為奇數(即 v % 2 == 1),那麼可以將這個字元作為回文中心,注意只能最多有乙個字元作為回文中心。在**中,我們用 ans 儲存回文串的長度,由於在遍歷字元時,ans 每次會增加 v / 2 * 2,因此 ans 一直為偶數。但在發現了第乙個出現次數為奇數的字元後,我們將 ans 增加 1,這樣 ans 變為奇數,在後面發現其它出現奇數次的字元時,我們就不改變 ans 的值了。
class
solution
int ans =0;
for(
int v:count)
}return ans;
}}
class
solution
(object):
deflongestpalindrome
(self, s)
:"""
:type s: str
:rtype: int
"""ans =
0 count = collections.counter(s)
for v in count.values():
ans += v //2*
2if ans %2==
0and v %2==
1:ans = ans +
1return ans
409 最長回文串
給定乙個包含大寫字母和小寫字母的字串,找到通過這些字母構造成的最長的回文串。在構造過程中,請注意區分大小寫。比如 aa 不能當做乙個回文字串。注意 假設字串的長度不會超過 1010。示例 1 輸入 abccccdd 輸出 7 解釋 我們可以構造的最長的回文串是 dccaccd 它的長度是 7。回文串...
409 最長回文串
題目 給定乙個包含大寫字母和小寫字母的字串,找到通過這些字母構造成的最長的回文串。在構造過程中,請注意區分大小寫。比如 aa 不能當做乙個回文字串。注意 假設字串的長度不會超過 1010。示例 1 輸入 abccccdd 輸出 7 解釋 我們可以構造的最長的回文串是 dccaccd 它的長度是 7。...
409 最長回文串
題目要求以及示例 給定乙個包含大寫字母和小寫字母的字串,找到通過這些字母構造成的最長的回文串。在構造過程中,請注意區分大小寫。比如 aa 不能當做乙個回文字串。注意 假設字串的長度不會超過 1010。示例 1 輸入 abccccdd 輸出 7 解釋 我們可以構造的最長的回文串是 dccaccd 它的...