刷題記錄 leetcode409:最長迴文串
阿新 • • 發佈:2020-07-23
給定一個包含大寫字母和小寫字母的字串,找到通過這些字母構造成的最長的迴文串。
示例
輸入: "abccccdd" 輸出: 7 解釋: 我們可以構造的最長的迴文串是"dccaccd", 它的長度是 7。
思路:如果字母出現的次數是偶數,可以直接用,如果是奇數,注意有兩種情況,這個奇數如果大於1,可以減1變成偶數拿來用,但是如果只有一個字母是奇數或者這個奇數等於1,它可以被放在中間而不用減1。考慮到這種情況,可以把所有奇數都減1處理,如果最後的結果小於字串長度,說明有個奇數應該被放在中間,再給結果加1
public int longestPalindrome(String s) {int[] cnts = new int[256]; for (char c : s.toCharArray()) { cnts[c]++; } int palindrome = 0; for (int cnt : cnts) { palindrome += (cnt / 2) * 2; // 偶數不變,奇數減1變成偶數 } if (palindrome < s.length()) { palindrome++; // 這個條件下 s 中一定有單個未使用的字元存在,可以把這個字元放到迴文的最中間 }return palindrome; }