刷題48 最長回文串

2022-07-28 04:15:14 字數 909 閱讀 4869

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

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

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

輸入:

"abccccdd"

輸出:7

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

charcodeat() 方法可返回指定位置的字元的 unicode 編碼。

統計每個字母出現的次數,若次數是偶數,可以構建回文字串。

a-z,a-z是從unicode編碼是65(十進位制)- unicode編碼是90(十進位制),unicode編碼是97(十進位制)- unicode編碼是122(十進位制),一共是58個字母,定義陣列snum用來存放每個字母出現的個數,預設為0,即let snum = new array(58).fill(0);

使用charcodeat() 方法可返回指定位置的字元的 unicode 編碼,把字母unicode 編碼-65可以使索引從0開始計數,減少陣列長度。

記錄每個字母出現的次數(snum[value.charcodeat() - 65] +=1);

遍歷每個字母出現的次數,若次數是偶數,可以構建回文字串,長度可以算到最大長度中;

如果計算出來的長度比原來字串長度小,那麼一定是奇數長度的回文字串,所以最大長度加1。

/**

* @param s

* @return

*/var longestpalindrome = function(s)

let max = 0;

for(let num of snum)

return max < s.length ? max+1 : max;

};

leetcode刷題 最長回文子串

看了一下題解,還有很多種方法,比如動態規劃,但是看了乙個下午也沒看太懂。所以就先把暴力破解弄懂吧。我這個菜雞,還要多多努力啊。主要問題在,不知道怎麼列舉字串的所有子串,題解中使用的是雙指標辦法,固定左指標,右指標移動得到全部的子串。最後,進行回文字串的驗證時,也是採用的雙指標方法來進行驗證。因此雙指...

leecode刷題2 最長回文子串

給定乙個字串s,找到s中最長的回文子串。你可以假設s的最大長度為1000。最開始的想法是暴力求解最長的回文子串,具體的思路如下 class solution for int i 0 ifor int j i jif plaindrome temp result.length return resul...

LeetCode刷題日記 409 最長回文串

在構造過程中,請注意區分大小寫。比如 aa 不能當做乙個回文字串。注意 假設字串的長度不會超過 1010。示例 1 輸入 abccccdd 輸出 7 解釋 我們可以構造的最長的回文串是 dccaccd 它的長度是 7。解析 統計每個字元的個數即可,雙數才能構成回文串。如果剛好都兩兩成對,那麼回文串長...