3月打卡活动第19天 LeetCode第409题:最长回文串(简单)

3月打卡活动第19天 LeetCode第409题:最长回文串(简单)

  • 题目:给定一个包含大写字母和小写字母的字符串,找到通过这些字母构造成的最长的回文串。在构造过程中,请注意区分大小写。比如 “Aa” 不能当做一个回文字符串。注意:假设字符串的长度不会超过 1010。
    在这里插入图片描述
  • 解题思路:利用HashMap存储每个字母出现的次数。
class Solution {
    public int longestPalindrome(String s) {
        HashMap<String,Integer> map = new HashMap<>();
        int len = s.length();
        if(len==0) return 0;
        if(len==1) return 1;
        for(int i=0;i<len;i++){
            String ss = s.charAt(i) + "";
            if(map.containsKey(ss)){
                map.put(ss,map.get(ss)+1);
            }else{
                map.put(ss,1);
            }
        }
        int max = 0;
        for(Map.Entry<String,Integer> entry:map.entrySet()){
            if(entry.getValue()%2!=0){
                len--;
                max = 1;
            }
        }
        return max==1?len+1:len;
    }
}

在这里插入图片描述

  • 题解做法:用数组存储字母出现次数。
class Solution {
    public int longestPalindrome(String s) {
        int[] count = new int[128];
        for (char c: s.toCharArray())
            count[c]++;

        int ans = 0;
        for (int v: count) {
            ans += v / 2 * 2;
            if (v % 2 == 1 && ans % 2 == 0)
                ans++;
        }
        return ans;
    }
}

在这里插入图片描述

发布了100 篇原创文章 · 获赞 12 · 访问量 2349

猜你喜欢

转载自blog.csdn.net/new_whiter/article/details/104960423