• LeetCode409-最长回文串(数学题)


    一开始觉得这个题目很难,但是仔细看一下,其实是拿字符串里面的字符来构造回文串。

    怎样才能构造回文串呢?

    对称的才是回文串,所以只要有偶数个同样的字符就行了。

    比如AAAABBCBBAAAA

    1、只要有偶数个相同的字符,那么他们就能对称分两边,肯定可以啊

    2、中间加一个单个的字符就行,因为中间加上一个也是回文。

    3、如果是奇数的话,选其中偶数个就行了。

    所以,只要统计 偶数个出现的字符个数,奇数个出现-1的字符个数

    class Solution {
        public int longestPalindrome(String s) {
            Map<Character,Integer> map = new HashMap<>();
    
            int len = s.length();
    
            for(int i=0;i<len;i++){
                Integer temp = map.get(s.charAt(i));
                if(temp==null){
                    map.put(s.charAt(i),1);
                }else{
                    map.put(s.charAt(i),temp+1);
                }
            }
    
            Set set = map.keySet();
            //偶数,肯定行
            //奇数,-1再加上去,如果是1,就加0,没有影响
            //如果出现奇数,最后的结果就能+1了,因为毕竟-1再加
            boolean flag = false;
            int result = 0;
            Iterator<Character> iterator = set.iterator();
            while(iterator.hasNext()){
                int count = map.get(iterator.next());
                if(count%2==0){
                    result+=count;
                }else {
                    flag=true;
                    result+=(count-1);
                }
            }
    
            if(flag)
                result+=1;
    
            return result;    
        }
    }

    最快的做法还是数组,因为A-Z a-z可以用数字表示

    但是这俩不是连续的,得用两个数组

  • 相关阅读:
    leetcode(85)最大矩形
    红黑树
    查询学生成绩表中大于60分的每一个成绩的人数
    聚合函数以及SQL中的一些小知识
    Oracle的JDBC
    StringBuffer的reverse方法
    查询时报第一页没有数据,第二页有数据的异常
    普通人如何从平庸到优秀,在到卓越
    HDMI、DVI、VGA等这些接口
    显卡上的VGA接口和高清接口有什么区别?
  • 原文地址:https://www.cnblogs.com/weizhibin1996/p/9707837.html
Copyright © 2020-2023  润新知