21xrx.com
2024-12-23 01:51:59 Monday
登录
文章检索 我的文章 写文章
Java中求最大公共子串的实现及应用
2023-06-12 16:41:02 深夜i     --     --
Java 最大公共子串 动态规划

最大公共子串是指在两个字符串中相同的最长子串。在Java中有多种求解方法,可以通过暴力匹配、动态规划、后缀数组等方式实现。其中,动态规划的算法效率最高,代码实现简单。

动态规划求最长公共子串的基本思路是:定义一个二维数组,用行和列来分别表示原字符串的字符,对于数组中的每个位置,如果两个字符相同,则相应位置赋为左上角位置的值加1,否则赋为0,最后找出数组中值最大的位置,对应的就是最长公共子串的长度。

下面是Java实现最长公共子串的代码案例:


public static String getMaxSubString(String str1, String str2) {

  String maxSubString = "";

  int maxLength = 0;//记录最大公共子串长度

  int length1 = str1.length();

  int length2 = str2.length();

  int[][] arr = new int[length1][length2];//用二维数组记录状态

  for(int i=0; i

    for(int j=0; j

      if(str1.charAt(i) == str2.charAt(j)){

        if(i==0 || j==0){

          arr[i][j] = 1;//当i或j为0时,即第一行或第一列,赋值为1

        } else {

          arr[i][j] = arr[i-1][j-1] + 1;//否则赋值为左上角的值加1

        }

        //记录最大公共子串长度,并将maxSubString赋值为相应的子串

        if(arr[i][j] > maxLength){

          maxLength = arr[i][j];

          maxSubString = str1.substring(i-maxLength+1, i+1);

        }

      }

    }

  }

  return maxSubString;

}

除了求解最长公共子串长度外,该算法还可以应用于求解最长公共子序列、最长不连续公共子序列等问题。通过动态规划求解最长公共子串,可以提高字符串匹配的效率,有效缩短程序的运行时间。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复