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); } }