【LeetCode记录】718. Maximum Length of Repeated Subarray

    技术2022-07-11  103

    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; }
    Processed: 0.009, SQL: 9