题解 | #最长回文子串#

最长回文子串

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

import java.util.*;

public class Main {
    public static void main(String...args) {
        Scanner in = new Scanner(System.in);

        String a = in.nextLine();
        System.out.println(num(a));

        in.close();
    }
    public static int num(String input) {
        int l = input.length();
        int[][] arr = new int[l][l];
        char[] ch = input.toCharArray();
        for(int i = 0; i < l; i++)
            for(int j = i; j < l; j++) {
                if(ch[i] == ch[j])
                    arr[i][j] = 1;
                else arr[i][j] = 0;
            }
        //对上三角进行标记是否相同, 回文字符串必定会有 / 这个方向斜线的连贯
        int max = 0;
        int count = 0;

        for(int i = 0; i < l-1; i++) {
            int j = i;
            int n = 1;
            count = 0;
            while( j >= 0 && j+n <= l-1 && arr[j][j+n] == 1 ) {
                count = count + 2;
                j--;
                n = n + 2;
            }
            max = Math.max(max, count);
        }

        // 上循环是针对偶数对称, 下循环是针对奇数对称

        for(int i = 0; i < l-2; i++) {
            int j = i;
            int n = 2;
            count = 1;
            while( j >= 0 && j+n <= l-1 && arr[j][j+n] == 1 ) {
                count = count + 2;
                j--;
                n = n + 2;
            }
            max = Math.max(max, count);
        }
        return max;
    }
}

我这个解法应该O(n)了, 直接建立类似LCS的表格进行求解

全部评论

相关推荐

预计下个星期就能开奖吧,哪位老哥来给个准信
华孝子爱信等:对接人上周说的是这周
点赞 评论 收藏
分享
1 收藏 评论
分享
牛客网
牛客企业服务