最長回文串

2021-10-09 06:50:57 字數 1691 閱讀 8323

「最長回文串」

給定乙個包含大寫字母和小寫字母的字串,找到通過這些字母構造成的最長的回文串。

在構造過程中,請注意區分大小寫。比如 「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...