Go語言 LeetCode 最長回文串

2021-10-04 03:05:40 字數 882 閱讀 3063

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

在構造過程中,請注意區分大小寫,比如 「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這兩個常量之後,在整個程式執行期間它們的值都不能再發生變化了。多個常...