給定乙個包含大寫字母和小寫字母的字串,找到通過這些字母構造成的最長的回文串。
在構造過程中,請注意區分大小寫。比如"aa"
不能當做乙個回文字串。
注意:假設字串的長度不會超過 1010。
輸入:charcodeat() 方法可返回指定位置的字元的 unicode 編碼。"abccccdd"
輸出:7
解釋:我們可以構造的最長的回文串是"dccaccd", 它的長度是 7。
統計每個字母出現的次數,若次數是偶數,可以構建回文字串。
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。解析 統計每個字元的個數即可,雙數才能構成回文串。如果剛好都兩兩成對,那麼回文串長...