字符串求最大回文问题

//求最大回文问题,最有名的要数manacher算法-----该算法采用的从对称轴点开始向左右扩散,为解决对称奇偶问题,向每个字符间插入没有没有出现过的字符(包括首尾)。
//参考博客:https://segmentfault.com/a/1190000003914228
//但我这里采用了,二维矩阵来进行计算。基本思路如下:(为以后自己回忆方便,立个flag)
public class Main{
    public static void main(String[] args){
        Scanner scanner = new Scanner(System.in);
        while (scanner.hasNextLine()){
            String str = scanner.next();
            StringBuilder sb = new StringBuilder(str).reverse();    //对原字符串进行反转,根据回文特性,反转前后一致。非回文则不一致
            System.out.println(core(str.toCharArray(),sb.toString().toCharArray()));

        }
    }
    private static int core(char[] str,char[] sb){
        int dp[][] = new int[str.length+1][str.length+1];   //创建一个二维矩阵,行对应原字符串,列对应反转后字符串
        int max = 0;    //记录二维矩阵连续对角线最大值。
        for(int i = 1;i < str.length+1;i++){    //遍历二维矩阵行
            for(int j = 1;j < str.length+1;j++){    //遍历二维矩阵列
                if(str[i-1] == sb[j-1]){    //如果相等,将ij所处位置上的上一个对角线位置的值加一。核心思想--回文在二维数组中一定处在准对角线的位置上,有多少,累加多少次
                    dp[i][j] = dp[i-1][j-1] + 1;    
                }
                if(dp[i][j] > max)  //更新最大值
                    max = dp[i][j];
            }
        }
        return max;
    }
}
全部评论
可以用一维为什么要做二维
点赞 回复
分享
发布于 2018-01-18 11:25

相关推荐

点赞 4 评论
分享
牛客网
牛客企业服务