首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >Java最大公共子串(动态规划)

Java最大公共子串(动态规划)

作者头像
红目香薰
发布2022-11-29 14:25:06
发布2022-11-29 14:25:06
5420
举报
文章被收录于专栏:CSDNToQQCodeCSDNToQQCode

最大公共子串长度问题就是:

求两个串的所有子串中能够匹配上的最大长度是多少。 比如:“abcdkkk” 和 “baabcdadabc”, 可以找到的最长的公共子串是"abcd",所以最大公共子串长度为4。 下面的程序是采用矩阵法进行求解的,这对串的规模不大的情况还是比较有效的解法。 请分析该解法的思路,并补全划线部分缺失的代码。 这个有点dp的意思,分别计算两个字符串每一个字符到另一个字符是否相等 若相等 则加前面字符的最大字符串 若前面字符也分别相等则他就等于a[i-1][j-1]+1 若不想等则为0+1

 测试数据1:

代码语言:javascript
复制
abcdkkk
baabcdadabc
代码语言:javascript
复制
import java.util.Scanner;

public class Main {
	static Scanner sc =new Scanner(System.in);
	
	static int f(String s1, String s2) {
		char[] c1 = s1.toCharArray();
		char[] c2 = s2.toCharArray();

		int[][] a = new int[c1.length + 1][c2.length + 1];

		int max = 0;
		for (int i = 1; i < a.length; i++) {
			for (int j = 1; j < a[i].length; j++) {
				if (c1[i - 1] == c2[j - 1]) {
					a[i][j] = a[i - 1][j - 1] + 1; //填空处
					if (a[i][j] > max)
						max = a[i][j];
				}
			}
		}

		return max;
	}

	public static void main(String[] args) {
		int n = f(sc.next(), sc.next());
		System.out.println(n);
	}
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021-05-29,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 最大公共子串长度问题就是:
  •  测试数据1:
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档