码迷,mamicode.com
首页 > 其他好文 > 详细

最长回文子串优化

时间:2015-04-27 10:03:04      阅读:115      评论:0      收藏:0      [点我收藏+]

标签:

import java.util.Scanner;

public class TheLengthPalindromicNumber1 {

    public static void main(String[] args) {

        Scanner in = new Scanner(System.in);
        int n = in.nextInt();
        while (n-- != 0) {
            String a = in.next();
            int len = a.length();
            int nlen = 2 * len + 3;
            char b[] = new char[nlen + 10];
            char c[] = a.toCharArray();
            int max = 0;
            int id = 0;

            b[0] = ‘$‘;
            b[1] = ‘#‘;
            int i = 0;

            for (; i < len; i++) {
                b[i * 2 + 2] = c[i];
                b[i * 2 + 3] = ‘#‘;
            }
            b[nlen - 1] = 0;
            int p[] = new int[nlen];
            for (int j = 1; j < nlen; j++) {
                p[j] = 0;
            }
            for (i = 1; i < nlen; i++) {
                if (max > i)
                    p[i] = Math.min(p[2 * id - i], p[id] + id - i);
                else
                    p[i] = 1;
                while (b[i + p[i]] == b[i - p[i]])
                    p[i]++;
                if (p[i] + i > max) {
                    max = p[i] + i;
                    id = i;
                }
            }
            int mx = 0;
            for (i = 1; i < nlen; i++) {
                if (mx < p[i] - 1)
                    mx = p[i] - 1;
            }
            System.out.println(mx);
        }

        in.close();
    }

}

最长回文子串优化

标签:

原文地址:http://blog.csdn.net/a819721810/article/details/45290275

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!