alt

char* LCS(char* str1, char* str2 ) {
    int len1=strlen(str1);
    int len2=strlen(str2);
    //初始化一个len1+1和len2+1大小的二维数组,+1是为了避免判断边界条件
    int dp[len1+1][len2+1];
    //将多出的一行一列初始化为0
    for(int i=0;i<len1+1;i++){
        dp[i][0]=0;
    }
    for(int j=0;j<len2+1;j++){
        dp[0][j]=0;
    }
    
    int max_len=0;
    int end=0;
    //因为dp矩阵多一行一列,所以索引从1开始,后面有关索引的都要注意转换的关系
    for(int i=1;i<len1+1;i++){
        for(int j=1;j<len2+1;j++){
            if(str1[i-1]==str2[j-1]){
                dp[i][j]=dp[i-1][j-1]+1;
            }else{
                dp[i][j]=0;
            }
            if(dp[i][j]>max_len){
                max_len=dp[i][j];
                end=i;
            }
        }
    }
    str1[end]='\0';
    
    return str1+end-max_len;
}