「最長回文串」
給定乙個包含大寫字母和小寫字母的字串,找到通過這些字母構造成的最長的回文串。
在構造過程中,請注意區分大小寫。比如 「aa」 不能當做乙個回文字串。
注意:假設字串的長度不會超過 1010。
示例 1:
輸入:「abccccdd」
輸出:7
解釋:我們可以構造的最長的回文串是"dccaccd", 它的長度是 7。1
對字串進行排序,就會使相同值的字元聚集成簇。所以,就可以較容易獲取相同值的單個字元數量。
回文串只有兩種情況:
1)n對相同字元相對於中心位置左右對稱,如"abba" = 「ab」 + 「ba」
2)n對相同字元相對於中心位置的奇數個相同字元對稱,如」abcba" = 「ab」 + 「c」 + 「ba」,「abcccba」 = 「ab」 + 「ccc」 + 「ba」。[^2]
如果需要從指定字串中逐個挑選組成最大的回文串,可以理解為:
1)出現次數為偶數的字元一定全部包含在內;
2)出現次數大於1且為奇數的字元一定包含在內,這個奇數個字元除去乙個字元,也可視為出現次數為偶數的字元,同1);
3)出現在回文串中心位置的字串,如[^2]描述是奇數時,1)2)構成的回文串才最大。
例如: 假設 s = 「abcdabbbccde", 求s中逐個挑選字元組成的最大回文串p。
=> start: s = 「abcdabbbccde"
=> sorted(s) = 「aabbbcccdde」
=> s.count(『a』) = 2 => p = 「aa」
=> s.count(『b』) = 4 => p = 「abbbba」
=> s.count(『c』) = 3 => p = 「abbccbba」
=> len(s) > len§ => s - p = 「ce」 => p = 「abbcccbba」 or 「abbcecbba」 or …
=> end: len§
"""
@author: wowlnan
"""class
solution
:def
longestpalindrome
(self, s:
str)
->
int:
ifnot s:
return
0 a=
list
(sorted
(s))
b=a[0]
c=0 l=
0 l2=
0 m=
0for d in a:
if d==b:
c+=1else
:if c%2==
0:l+=c
else
:if c>1:
l2+=c-
1 b=d
c=1if c%2==
0:l+=c
else
:if c>1:
l2+=c-
1if c==
len(a)
:return
len(a)
l=l+l2
if l<
len(a)
: l+=
1return l
↩︎ 最長回文串
輸入乙個字串,求出其中的最長回文字串,樣例輸入 confucicss say madam,i m asam。樣例輸出 masam,i m asam。這個題首先要判斷最長那個回文串的位置,並且與大小寫無關,用到函式 toupper 然後輸出後面的字串。include include include i...
最長回文串
時間限制 1000ms 單點時限 1000ms 記憶體限制 64mb 描述 小hi和小ho是一對好朋友,出生在資訊化社會的他們對程式設計產生了莫大的興趣,他們約定好互相幫助,在程式設計的學習道路上一同前進。這一天,他們遇到了一連串的字串,於是小hi就向小ho提出了那個經典的問題 小ho,你能不能分別...
最長回文串
給出乙個包含大小寫字母的字串。求出由這些字母構成的最長的回文串的長度是多少。資料是大小寫敏感的,也就是說,aa 並不會被認為是乙個回文串。注意事項 假設字串的長度不會超過1010。您在真實的面試中是否遇到過這個題?yes 樣例給出 s abccccdd 返回7 一種可以構建出來的最長回文串方案是 d...