LintCode python 小白-簡單題-627最長迴文串
阿新 • • 發佈:2019-02-11
題目:給出一個包含大小寫字母的字串。求出由這些字母構成的最長的迴文串的長度是多少。
資料是大小寫敏感的,也就是說,”Aa” 並不會被認為是一個迴文串。
假設字串的長度不會超過 1010。
樣例:給出 s = “abccccdd” 返回 7
一種可以構建出來的最長迴文串方案是 “dccaccd”。
思路:
- 輸入的是一個字串
- 將字串切割成一個一個的元素,然後能夠成對的基本就能構建迴文串。
- 將字串先轉換為列表,然後列表的每一個元素是字串的每一個字母,排好序,這樣子相同的元素會排在一起。
- 因為是兩個成對,所以若有奇數的相同元素,也只取偶數個,另外一個不能滿足要求的字母。
- 我們不能忽略中位數,即中間可以是獨立的一個,並且是列表中隨便的一個,為了求最大回文串,若有使單獨的字母,將其放在中間,使迴文串的長度+1。
程式碼:
class Solution:
# @param {string} s a string which consists of lowercase or uppercase letters
# @return {int} the length of the longest palindromes that can be built
def longestPalindrome(self, s):
# Write your code here
slist=list(s) #將字串轉變為列表
slist.sort() #排序
result=[] #存放滿足迴文串的字母
i=0 #迴圈初始化
j=0 #迴文串的長度初始為0
while i <len(slist)-1:
if slist[i]==slist[i+1]:
i+=2
j+=2
else:
i+=1
if j<len(slist): #判斷是否有獨立的字母
return j+1
else:
return j