給定一個包含大寫字母和小寫字母的字符串,找到通過這些字母構造成的最長的回文串。
在構造過程中,請注意區分大小寫。比如?"Aa"?不能當做一個回文字符串。
注意:
假設字符串的長度不會超過 1010。
示例 1:
輸入:
"abccccdd"
輸出:
7
解釋:
我們可以構造的最長的回文串是"dccaccd", 它的長度是 7。
思路:記錄字符出現的次數,出現兩次就可以對稱放,對應的回文串長度+2.
中間可能會加一個單獨字母做對稱軸,所以如果有一個字母出現奇數次,我們把他放到中間,長度+1.
class Solution {public int longestPalindrome(String s) {int[] count = new int[128];for (char c: s.toCharArray())count[c]++;int ans = 0;for (int v: count) {ans += v / 2 * 2;if (v % 2 == 1 && ans % 2 == 0)ans++;}return ans;}
}
?