718. Maximum Length of Repeated Subarray
最一开始接触到这个题,想到的是KMP算法2333;
然后想到的是string.h:A中所有子串去B里找;
发现不是字符串而是数组,故暴力法变得更为简单。
暴力法
int findLength(int* A, int ASize, int* B, int BSize){
int i,j;
int len = 0;
int maxlen = 0;
for(i = 0; i < ASize; i++){
for(j = 0; j < BSize; j++){
if(A[i] == B[j]){
len = 1;
while(((i + len) < ASize)&&((j + len) < BSize)&&(A[i + len] == B[j + len])){
len++;
}
if(len > maxlen)
maxlen = len;
}
}
}
return maxlen;
}
然后这个方法由于过于暴力,就:
所以去学习DP(Dynamic Programming,动态规划)解法。
DP
int findLength(int* A, int ASize, int* B, int BSize){
int dp[ASize][BSize];
int i,j;
for(i = 0; i < ASize; i++)
for(j = 0; j < BSize; j++)
dp[i][j] = 0;
int max = 0;
for(i = 0; i < ASize; i++){
for(j = 0; j < BSize; j++){
if(A[i] == B[j]){
if(i == 0 || j == 0)
dp[i][j] = 1;
else
dp[i][j] = dp[i-1][j-1] + 1;
}
if(max < dp[i][j])
max = dp[i][j];
}
}
return max;
}