最長回文串

2022-05-08 22:48:14 字數 1935 閱讀 4132

給出乙個包含大小寫字母的字串。求出由這些字母構成的最長的回文串的長度是多少。

資料是大小寫敏感的,也就是說,"aa"並不會被認為是乙個回文串。

注意事項

假設字串的長度不會超過1010

樣例

給出 s ="abccccdd"返回7

一種可以構建出來的最長回文串方案是"dccaccd"

這個題關鍵的一點就是如何處理奇數個的字元。

如果處理好了奇數個字元,那麼這個題就會迎刃而解。原因在於如果是偶數個的字元,一定可以構造回文數。但是奇數個的就不行。所有的奇數個的字元數都要減去1。

最後所有的奇數字串中只可以保留乙個完整的,就是它是多長就在最大回文串中加上多少。但是可想而知,這個奇數的回文串一定是位於整個調整後的回文串的最中間。

否者難以構成回文串。

比如"abbba"是個回文串但是有3個"b",只能放中間才能構成回文串。如果是"abbbccca"有3個"b",3個"c"這時就無法構成回文串,如果想構成回文串那麼這兩個奇數個的字元

要有乙個字元的個數減去1,然後把剩下的那個個數為3的字元放在最中間"acbbbca"或者"abcccba"當然對稱的部分順序也是可以調換的"cabbbac","bacccab"。

最關鍵的一步就是如何處理奇數個的字元。

通過前面的敘述應該很明白了。就是奇數個的字元。都減去1,再在最後的基礎上,判斷是否有奇數個的字元。如果有那麼結果加上1返回就可以了。

想了很久,除錯了很久終於把這個問題給解決了。

public

class

maxhuiwenchuan

/*** 解析字串,獲得每個字元的個數,並返回個數list。

*/public listgetlist(string s)

for (char ll = 'a'; ll <= 'z'; ll++)

list

list1 = new arraylist();

for (int i = 0; i < list.size(); i++)

}if (k != 0)

}return

list1;

}/*** 對list集合進行分析。並確定最長的回文數。

*/public

int getmaxhuiwenshu(listlist)

boolean hasjishu = false

;

for (int i = 0; i < list.size(); i++)

}if(hasjishu)

return

count;

}public

static

void

main(string args)

}

public

class

solution

boolean hasood = false

;

int record = new

int[52];

for(int i = 0;i)

for(int i = 0;i)

else

} int result = 0;

for(int i = 0;i)

} if(hasood) result++;

return

result;

} }

最長回文串

輸入乙個字串,求出其中的最長回文字串,樣例輸入 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...