代码拉取完成,页面将自动刷新
作者:office多多 链接:https://www.nowcoder.com/discuss/374134?type=0&order=0&pos=67&page=1
dp[i][j]:表示子串A[0...i](数组长度为n)和子串B[0...j](数组长度为m)的最长公共子序列
当A[i] == B[j]
时,dp[i][j] = dp[i-1][j-1] + 1
;
否则,dp[i][j] = max(dp[i-1][j], dp[i][j-1])
;
最优解为dp[n-1][m-1];
JAVA代码实现:
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
while (scanner.hasNextLine()) {
String str1 = scanner.nextLine().toLowerCase();
String str2 = scanner.nextLine().toLowerCase();
System.out.println(findLCS(str1, str1.length(), str2, str2.length()));
}
}
public static int findLCS(String A, int n, String B, int m) {
int[][] dp = new int[n + 1][m + 1];
for (int i = 0; i <= n; i++) {
for (int j = 0; j <= m; j++) {
dp[i][j] = 0;
}
}
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= m; j++) {
if (A.charAt(i - 1) == B.charAt(j - 1)) {
dp[i][j] = dp[i - 1][j - 1] + 1;
} else {
dp[i][j] = dp[i - 1][j] > dp[i][j - 1] ? dp[i - 1][j] : dp[i][j - 1];
}
}
}
return dp[n][m];
}
}
https://blog.csdn.net/wolfGuiDao/article/details/104590791
https://blog.csdn.net/zangdaiyang1991/article/details/94555112
https://blog.csdn.net/qq_41706331/article/details/90271543
现在免费送给大家,在我的公众号 好好学java 回复 资料 即可获取。
有收获?希望老铁们来个三连击,给更多的人看到这篇文章
1、老铁们,关注我的原创微信公众号「好好学java」,专注于Java、数据结构和算法、微服务、中间件等技术分享,保证你看完有所收获。
2、给俺一个 star 呗,可以让更多的人看到这篇文章,顺便激励下我继续写作,嘻嘻。
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。