最长重复子数组
程序员文章站
2022-03-24 17:23:50
...
给两个整数数组 A 和 B ,返回两个数组中公共的、长度最长的子数组的长度。
示例:
输入:
A: [1,2,3,2,1]
B: [3,2,1,4,7]
输出:3
解释:
长度最长的公共子数组是 [3, 2, 1] 。
看起来很难吧,想了想,递归pass,动态规划emmmm,想想就难,栈?dfs?bfs?滑动窗口?我也不会写啊,,,,,,,啥也想不起来????
一看解析,我勒个擦,这么简单:
就是一张图解决的事儿:
public class Solution {
public int findLength(int[] A, int[] B) {
int dp[][] = new int[A.length][B.length];
// 相等就赋值为1
for(int i=0; i<A.length; i++){
for(int j=0; j<B.length; j++){
if(A[i] == B[j]){
dp[i][j] = 1;
}
}
}
// 从前向后,加1
for(int i=1; i<A.length; i++){
for(int j=1; j<B.length; j++){
if(dp[i-1][j-1] != 0 && dp[i][j] == 1){
dp[i][j] = dp[i-1][j-1] + 1;
}
}
}
// 找最大值
int res = Integer.MIN_VALUE;
for(int i=0; i<A.length; i++){
for(int j=0; j<B.length; j++){
if(dp[i][j] > res){
res = dp[i][j];
}
}
}
return res;
}
public static void main(String[] args) {
Solution s = new Solution();
s.findLength(new int[]{1,2,3,2,1}, new int[]{3,2,1,4,7});
}
}
上一篇: 【leetcode】最长公共子数组
下一篇: 连续子数组的最大和