LintCode 最长回文串

题目

给出一个包含大小写字母的字符串。求出由这些字母构成的最长的回文串的长度是多少。

数据是大小写敏感的,也就是说,"Aa" 并不会被认为是一个回文串。

 注意事项

假设字符串的长度不会超过 1010。

样例
给出 s = "abccccdd" 返回 7

一种可以构建出来的最长回文串方案是 "dccaccd"

思路

  1. 先找出不同的字符。
  2. 然后遍历每个不同字符有多少个。
  3. 每个字符的个数/2相加的和再乘上2得到len(处理奇数个数)。
  4. 如果这个len等于字符串的长度,则len就是最大回文长度;否则最大回文长度等于len+1.(就是回文中间位置是否可以加只有一个的字符)

代码

 public int longestPalindrome(String s) {
        // Write your code here
        char ch[] = s.toCharArray();
        Set set = new HashSet<>();
        for (int i = 0; i < s.length(); i++) {
            set.add(ch[i]);
        }
        int a[] = new int[set.size()];
        int n = 0;
        for (Character c : set) {
            int count = 0;
            for (int i = 0; i < s.length(); i++) {
                if (c == ch[i]) {
                    count++;
                }
            }
            a[n] = count;
            n++;
        }
        int sum = 0;
        for (int i = 0; i < a.length; i++) {
            sum += a[i] / 2;
        }
        //回文中间位置是否可以加只有一个的字符
        if (2 * sum < s.length()) {
            return 2 * sum + 1;
        } else {
            return 2 * sum;
        }

    }

你可能感兴趣的:(#,LintCode编程笔记)