題目:給定乙個包含大寫字母和小寫字母的字串,找到通過這些字母構造成的最長的回文串。
在構造過程中,請注意區分大小寫,比如 「aa」 不能當做乙個回文字串。
注意:
假設字串的長度不會超過1010。
示例1:
輸入:「abccccdd」
輸出: 7
解釋:我們可以構造最長的回文串是 「dccaccd」 ,它的長度是 7 。
分析:
首先,回文串的結構是關於中心對稱的。如果回文串的長度為偶數,那麼必然每個字元都出現偶數次;如果回文串的長度為奇數次,那麼這個串必然是關於中心那個字元兩邊對稱的。
根據回文串的特性,可以知道,出現在回文串中的字元最多只有乙個字元出現奇數次,其它字元必須出現偶數次。出現奇數次的那個字元必然是處於字串中心的。因此,本題的解法思路如下:
用 map 來統計字串中每個字元出現的次數。
如果該字元出現偶數次,那麼該字元可以全部出現在最長回文串中。
在所有出現奇數次的字元中,只能有乙個字元可以全部出現在最長回文串中,其餘的字元出現的次數必須 減1 變成偶數次後可以全部出現在最長回文串中。
具體實現如下**所示:
func
longestpalindrome
(s string
)int
var res int
var cnt int
//用於計算出現奇數次字元的個數
for_
, v :=
if v%2==
0else
}if cnt !=
0return res
}
Manacher Algorithm 最長回文子串
列舉子串 起點和終點 再判斷子串是否回文串。時間複雜度o n 3 列舉子串的中點,從中點向兩側擴充套件判斷回文串。時間複雜度o n 2 在前一種演算法的基礎上再加以改進,達到o n 的時間複雜度 首先考慮乙個問題 長度為奇數的字串的中心是中間那個字元的位置,而長度為偶數的字串的中心是中間兩個字串之間...
LeetCode 9 回文數 Go實現
回文數 給你乙個整數 x 如果 x 是乙個回文整數,返回 ture 否則,返回 false 回文數是指正序 從左向右 和倒序 從右向左 讀都是一樣的整數。例如,121 是回文,而 123 不是。示例 1 輸入 x 121 輸出 true 示例 2 輸入 x 121 輸出 false 解釋 從左向右讀...
Go語言之GO 語言常量
相對於變數,常量是恆定不變的值,多用於定義程式執行期間不會改變的那些值。常量的宣告和變數宣告非常類似,只是把var換成了const,常量在定義的時候必須賦值。const pi 3.1415 const e 2.7182宣告了pi和e這兩個常量之後,在整個程式執行期間它們的值都不能再發生變化了。多個常...