From 17cca86566f7bbf973e5e4d1d49cfbf7df9a184f Mon Sep 17 00:00:00 2001 From: yuanguangxin <274841922@qq.com> Date: Thu, 30 Jul 2020 17:00:41 +0800 Subject: [PATCH] add q1143 --- README.md | 2 +- .../q1143_最长公共子序列/Solution.java | 28 +++++++++++++++++++ 2 files changed, 29 insertions(+), 1 deletion(-) create mode 100644 src/动态规划/q1143_最长公共子序列/Solution.java diff --git a/README.md b/README.md index 9fa9f93..c9e7c9e 100644 --- a/README.md +++ b/README.md @@ -97,7 +97,7 @@ * [q70_爬楼梯](/src/动态规划/q70_爬楼梯) * [q118_杨辉三角](/src/动态规划/q118_杨辉三角) * [q300_最长上升子序列](/src/动态规划/q300_最长上升子序列) -* [q746_使用最小花费爬楼梯](/src/动态规划/q746_使用最小花费爬楼梯) +* [q1143_最长公共子序列](/src/动态规划/q1143_最长公共子序列) * [q1277_统计全为1的正方形子矩阵](/src/动态规划/q1277_统计全为1的正方形子矩阵) ### 回溯法 diff --git a/src/动态规划/q1143_最长公共子序列/Solution.java b/src/动态规划/q1143_最长公共子序列/Solution.java new file mode 100644 index 0000000..8225a50 --- /dev/null +++ b/src/动态规划/q1143_最长公共子序列/Solution.java @@ -0,0 +1,28 @@ +package 动态规划.q1143_最长公共子序列; + +/** + * 动态规划 dp[i + 1][j + 1] = Math.max(dp[i+1][j], dp[i][j+1]) o(m*n) + * + * 若题目为最长公共子串,则在c1,c2不相等时不做处理(赋值0),在遍历过程中记录最大值即可 + */ +public class Solution { + + public int longestCommonSubsequence(String text1, String text2) { + int m = text1.length(); + int n = text2.length(); + int[][] dp = new int[m + 1][n + 1]; + + for (int i = 0; i < m; i++) { + for (int j = 0; j < n; j++) { + char c1 = text1.charAt(i); + char c2 = text2.charAt(j); + if (c1 == c2) { + dp[i + 1][j + 1] = dp[i][j] + 1; + } else { + dp[i + 1][j + 1] = Math.max(dp[i + 1][j], dp[i][j + 1]); + } + } + } + return dp[m][n]; + } +}