718. Maximum Length of Repeated Subarray

来源:互联网 发布:python哪个gui最简单 编辑:程序博客网 时间:2024/05/23 12:40

参考答案没看明白,干脆自己想了个办法,算是动态规划的改进版吧,不用开二维数组,最后时间是9ms,95%。先画一个矩阵[A.size()][B.size()],横行代表A,竖列代表B。leetcode给出的动态规划的 参考答案好像是横着遍历矩阵,我是斜着,从左上到右下遍历矩阵,这样就不用开二维数组了。

将矩阵按左上到右下的对角线分成两半。两个   (两层的for循环) ,分别用来遍历这两半。两层for循环:第一层用来从第一行第一个遍历到第一行最后一个,或从第一列第一个遍历到第一列最后一个;第二层for用来向右下移动,直到移动到矩阵边界,第二层循环结束,重回第一层。

int findLength(vector<int>& A, vector<int>& B) {        int res=0,alen=A.size(),blen=B.size();        for(int i=0;i<alen;i++){            int len=0;//当前subarray长度,不重复就为0.            for(int j=0;i+j<alen;j++){                if(A[i+j]==B[j]){//如果当前字符重复,subarray长度+1                    len++;                    if(len>res)//当前subarray长度比原来最大值大,替换原来最大值。                        res=len;                }                else//如果当前字符不重复,subarray长度重新设为0.                    len=0;            }        }        for(int k=0;k<blen;k++){//遍历矩阵的另外一半,和上面的for循环道理一样。            int len=0;            for(int l=0;k+l<blen;l++){                if(B[k+l]==A[l]){                    len++;                    if(len>res)                        res=len;                }                else len=0;            }        }        return res;    }
时间复杂度应该是O(n*m)吧,空间复杂度应该是O(1)。

原创粉丝点击