zoukankan      html  css  js  c++  java
  • java 获得字符串中最大重复子串长度

    参考:http://blog.csdn.net/csdn_yaobo/article/details/50338025

    要找一串字符串中,重复的字串长度,。例如ABCX1&ABC,中ABC重复了这道题呢021Abc9Abc1

      看上图,这个图是按这个规则画的,如果字符串相等,dp[i][j]=dp[i-1][j-1]+1,否则为0,那么我们发现除了对角线部分的数字以外,其余部分的数字中,1,2,3出现了两次,如图红色字体,那么我们就可以得到长度为3的字串重复出现了两次,这样这个问题就基本解决。

      下来我们只需要遍历这个二维矩阵,不过得加个条件,对角线上的数字不做统计,只需要判断大于二,相同的数字出现的次数,如果次数大于2则不否合要求。用一个一维数组统计出对角线以外的数字出现的个数,然后从3开始遍历,如果存在a[i]>1,说明长度大于2且出现了至少两次,直接输出不合格。

    int len = str.length();
    
            int array[][] = new int[len + 1][len + 1];
            for (int m = 0; m < len; m++) {
    
                for (int n = 0; n < len; n++) {
                    if (str.charAt(m) == str.charAt(n))
                        array[m + 1][n + 1] = array[m][n] + 1;
    
                }
    
            }
    
            int max = 0;
            for (int m = 0; m < len + 1; m++) {
    
                for (int n = 0; n < len + 1; n++) {
                    if ((m != n) && (array[m][n] > max))
                        max = array[m][n];
    
                }
    
            }

    max即为最大重复子串长度。

  • 相关阅读:
    php_memcache扩展
    window+nginx+php
    服务启动Apache服务,错误Parent: child process exited with status 3 -- Aborting.解决
    PHP文件下载
    gvim
    单车家族 结对项目三
    单车家族 结对项目二
    共享单车 网络定位
    注册页面 android 仿摩拜单车共享单车进度条实现StepView
    结对项目 ——功能结构图
  • 原文地址:https://www.cnblogs.com/xiaodeyao/p/5332834.html
Copyright © 2011-2022 走看看