LeetCode 409. Longest Palindrome

題目

給一個大小寫組成的字符串s,利用s中的字母,能組成的最長迴文新串的長度。
注意:大小寫敏感,”Aa” 不是迴文
例子:
s = “abccccdd”,其中字母可組成最長迴文新串 “dccaccd”,長度爲7

思路

迴文的特點是左右字母對稱,即由一對對的字母組成,中間可能包含一個單一不成對的字母。

掃描原串,利用列表isExist[26*2]記錄字母是否出現過,當一個字母出現過兩次時即該對字母可組成迴文串一部分,把表中該字母出現過的標記清空;若還沒出現過則在表中該字母對應位置打上標記。

最後迴文長度 = 對數 * 2 + 1(若還存在單獨的字母)

代碼

class Solution {
public:
    int longestPalindrome(string s) {

        // A...Za...z
        bool isExist[26*2] = {false};

        // has_Single 記錄表中爲 true 的個數,即單獨的字母的個數
        int pairs = 0, has_Single = 0;

        for (int i = 0; i < s.length(); i++) {

            int index = s[i] >= 'a'? s[i] - 'a' + 26: s[i] - 'A';

            if (isExist[index]) {

                has_Single--;

                pairs++;

                isExist[index] = false;

            } else {

                has_Single++;

                isExist[index] = true;

            }
        }

        return pairs * 2 + (has_Single > 0? 1 : 0);
    }
};
發佈了58 篇原創文章 · 獲贊 11 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章