leetcode 409 最長回文串 字元雜湊

2021-10-02 04:11:01 字數 1478 閱讀 5036

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

在構造過程中,請注意區分大小寫。比如 「aa」 不能當做乙個回文字串。

注意:假設字串的長度不會超過 1010。

示例 1:

輸入:「abccccdd」

輸出:7

解釋:我們可以構造的最長的回文串是"dccaccd", 它的長度是 7。

回文字串,從前向後遍歷和從後向前遍歷都是相同的

問題思考:

例如在s = "abccccddaa"中,有3個a,1個b,4個c,2個d

使用字串s中的字元,任意組合,生成新的字串,若生成的字串為回文字串,需要除了中心字元,其餘字元只要頭部出現,尾部就要出現

在字串中,字元數量為偶數的字元,或為奇數的字元如何進行處理

1、在字串中,字元數量為偶數的字元:

全部使用,頭部放乙個字元,尾部就對應放乙個

2、在字串中,字元數量為奇數的字元:

丟掉乙個字元,剩下的字元數為偶數個,按照字元數量為偶數的字元進行處理

3、若有剩餘的字元,隨便選擇乙個字元當做中心字元

演算法思路:

1、利用字元雜湊方法,統計字串中所有的字元數量

2、設定最長回文串偶數字元長度為max_length = 0;

3、設定是否有中心點標記flag = 0;

4、遍歷每乙個字元,字元數為count,若count為偶數,max_length+=count;若count為奇數,max_length += count - 1, flag = 1;

5、最終最長回文子串長度:max_length + flag

例如在s = "abccccddaa"中,有3個a,1個b,4個c,2個d

1、3個a,max_length += 2;flag = 1;如生成aa

2、1個b,max_length += 0;忽略b

3、4個c,max_length += 2;如生成ccaacc

4、2個d,max_length += 2;如生成dccaaccd

flag = 1;

故可生成如:dccaaaccd、dccabaccd

最終長度:max_length + flag = 8 + 1 = 9

**如下:

class

solution

;//字元雜湊

int max_length =0;

int flag =0;

for(

int i =

0; i < s.

length()

; i++

)for

(int i =

0; i <

128; i++

)else

}return max_length + flag;}}

;

LeetCode 409 最長回文串

題目傳送 給定乙個包含大寫字母和小寫字母的字串,找到通過這些字母構造成的最長的回文串。在構造過程中,請注意區分大小寫。比如 aa 不能當做乙個回文字串。注意 假設字串的長度不會超過 1010。示例 1 輸入 abccccdd 輸出 7解釋 我們可以構造的最長的回文串是 dccaccd 它的長度是 7...

LeetCode 409 最長回文串

給定乙個包含大寫字母和小寫字母的字串,找到通過這些字母構造成的最長的回文串。在構造過程中,請注意區分大小寫。比如 aa 不能當做乙個回文字串。注意 假設字串的長度不會超過 1010。示例 1 輸入 abccccdd 輸出 7 解釋 我們可以構造的最長的回文串是 dccaccd 它的長度是 7。先排個...

LeetCode 409 最長回文串

給定乙個包含大寫字母和小寫字母的字串,找到通過這些字母構造成的最長的回文串。在構造過程中,請注意區分大小寫。比如 aa 不能當做乙個回文字串。注意 假設字串的長度不會超過 1010。建立map存放26個大小寫字母的數量 如果該字母數量為偶數,則sum value 如果該字母數量為奇數,則把value...