题解 | #最长回文子串#

最长回文子串

https://www.nowcoder.com/practice/12e081cd10ee4794a2bd70c7d68f5507

import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.Scanner;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {

    private static Map<Character, List<Integer>> cIndexListMap = new HashMap<>();
    private static String s = "";
    private static int start = 0;
    private static int end = 0;
    private static String max = "";

    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        // 注意 hasNext 和 hasNextLine 的区别
        while (in.hasNext()) { // 注意 while 处理多个 case
            s = in.next();
        }

        initMap();
        int s = cIndexListMap.size();
        result();
        System.out.print(max.length());

    }

    private static void initMap() {
        int len = s.length();
        for (int i = 0; i < len; i++) {
            char c = s.charAt(i);
            boolean b = cIndexListMap.containsKey(c);
            if(b){
                cIndexListMap.get(c).add(i);
            } else {
                List<Integer> list =new LinkedList<>();
                list.add(i);
                cIndexListMap.put(c, list);
            }
        }
    }

    private static void result() {

        cIndexListMap.forEach((k, v) -> {
            int size = v.size();
            for (int i = 0; i < size - 1; i++) {
                start = v.get(i);
                for(int j=i+1;j<size;j++){
                    end = v.get(j);
                    check(start, end);
                }
            }
        });
    }

    private static void check(int start1, int end1) {
        char c = s.charAt(start1);
        char c1 = s.charAt(end1);
        if (c == c1) {
            if (start1 + 1 == end1 - 1) {
                if (end - start + 1 > max.length()) {
                    max = s.substring(start, end + 1);
                }
                return;
            } else if (end1 - start1 == 1) {
                if (end - start + 1 > max.length()) {
                    max = s.substring(start, end + 1);
                }
                return;
            }
            check(start1 + 1, end1 - 1);
        }
    }






}

以前二级考过的题,以前没做好,现在做出来感觉挺好。

#努力刷题下#
雪域灰灰刷题笔记 文章被收录于专栏

雪域灰灰刷题笔记

全部评论

相关推荐

程序员小白条:找的太晚,别人都是大三实习,然后大四秋招春招的,你大四下了才去实习,晚1年
点赞 评论 收藏
分享
07-11 15:12
门头沟学院 Java
别人在上班,我就在工位上看看视频啥的,这正常吗?
程序员小白条:实习就是摸鱼,只是公司指标,把你进来了,可能那时候客户很多,但等你进来的时候,已经是淡季了,根本没多少需求,或者说根本不适合实习生去完成,因此你就每天干坐着就行,可能1,2个月都没需求
实习生的蛐蛐区
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务