最长重复子数组
程序员文章站
2022-07-15 16:34:41
...
题目:力扣
解题思路:
最长公共子串换了个马甲,这要是搁在以前我可能看不出来,果然做题是有用的,看完题目就大概知道需要用动态规划做了,这种求最值的而不是具体内容的可以往动态规划上考虑一下,看看是否可以满足动态规划的条件。
class Solution {
public int findLength1(int[] A, int[] B) {
int row = A.length+1;
int col = B.length+1;
int ans = 0;
int[][] record = new int[row][col];
for(int i = 1; i < row; i++){
for(int j = 1; j < col; j++){
if(A[i-1] == B[j-1]){
record[i][j] = record[i-1][j-1]+1;
}
else{
record[i][j] = 0;
}
ans = Math.max(ans, record[i][j]);
}
}
return ans;
}
//优化空间
public int findLength2(int[] A, int[] B) {
int row = A.length+1;
int col = B.length+1;
int ans = 0;
int[] record = new int[col];
for(int i = 1; i < row; i++){
//必须从后向前遍历
for(int j = col-1; j >= 1; j--){
if(A[i-1] == B[j-1]){
record[j] = record[j-1]+1;
}
else{
record[j] = 0;
}
ans = Math.max(ans, record[j]);
}
}
return ans;
}
}
上一篇: 剑指offer 42 连续子数组的最大和
下一篇: 【剑指Offer】连续子数组的最大和