LintCode 最长回文串

来源:互联网 发布:zipalign优化教程 编辑:程序博客网 时间:2024/06/07 05:44

题目

给出一个包含大小写字母的字符串。求出由这些字母构成的最长的回文串的长度是多少。数据是大小写敏感的,也就是说,"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<Character> 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;        }    }
原创粉丝点击