1. 程式人生 > >409,最長迴文串

409,最長迴文串

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

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

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

示例 1:

輸入:
"abccccdd"

輸出:
7

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

思路:找出搜有奇數個的字元,我們採用的方法是使用一個set集合,如果遍歷到的字元不在set中,那麼就將其加入set,如果已經在set裡了,就將其從set中刪去,這樣遍歷完成後set中就是所有出現個數是奇數個的字元了,那麼我們最後只要用s的長度減去0和set長度減一之間的較大值即可,為啥這樣呢,我們想,如果沒有出現個數是奇數個的字元,那麼t的長度就是0,減1成了-1,那麼s的長度只要減去0即可;如果有奇數個的字元,那麼字元個數減1,就是不能組成迴文串的字元,因為迴文串最多允許一個不成對出現的字元,用雜湊集合

class Solution {     public int longestPalindrome(String s) {        HashSet<Character> hashset=new HashSet<>();         for (int i=0; i<s.length();i++) {             char c =s.charAt(i);             if (!hashset.contains(c))              {                hashset.add(c);              }             else hashset.remove(c);         }         return s.length() - java.lang.Math.max(0, (int)hashset.size() - 1);      } }