利用C++实现最长公共子序列与最长公共子串

2020-01-06 16:00:23王旭

得到转移方程:

最长公共子序列,c,最长公共子序列c语言,c语言最长公共子串

最长公共子串的长度为 max(c[i,j]), i∈{1,⋯,m},j∈{1,⋯,n}max(c[i,j]), i∈{1,⋯,m},j∈{1,⋯,n}

代码实现


public static int lcs(String str1, String str2) {
 int len1 = str1.length();
 int len2 = str2.length();
 int result = 0; //记录最长公共子串长度
 int c[][] = new int[len1+1][len2+1];
 for (int i = 0; i <= len1; i++) {
 for( int j = 0; j <= len2; j++) {
  if(i == 0 || j == 0) {
  c[i][j] = 0;
  } else if (str1.charAt(i-1) == str2.charAt(j-1)) {
  c[i][j] = c[i-1][j-1] + 1;
  result = max(c[i][j], result);
  } else {
  c[i][j] = 0;
  }
 }
 }
 return result;
}

总结

以上就是这篇文章的全部内容改了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流。


注:相关教程知识阅读请移步到C++教程频道。