题解 | #最长公共子序列(二)#

最长公共子序列(二)

https://www.nowcoder.com/practice/6d29638c85bb4ffd80c020fe244baf11

/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 *
 * longest common subsequence
 * @param s1 string字符串 the string
 * @param s2 string字符串 the string
 * @return string字符串
 */

#define max(a,b) a>b?a:b

char* LCS(char* s1, char* s2 ) {
    // write code here
    int row = strlen(s2) + 1;
    int col = strlen(s1) + 1;

    int len_calculator[row][col];
    int i = 0;
    for(; i < col; i++) {
        len_calculator[0][i] = 0;
    }
    int j;
    for(i = 1; i < row; i++) {
        j = 0;
        len_calculator[i][j] = 0;
        for(j = 1; j < col; j++) {
            if(s2[i - 1] == s1[j - 1]) {
                len_calculator[i][j] = len_calculator[i - 1][j - 1] + 1;
            } else {
                len_calculator[i][j] = max(len_calculator[i - 1][j], len_calculator[i][j - 1]);
            }
        }
    }

    char *ret = (char*)malloc(len_calculator[row - 1][col - 1] + 1);
    if(len_calculator[row - 1][col - 1] == 0) {
        return "-1";
    }
    ret[len_calculator[row - 1][col - 1]] = '\0';
    i = row - 1;
    j = col - 1;
    int index = len_calculator[i][j] - 1;
    while(i > 0 && j > 0) {
        if(len_calculator[i][j] == len_calculator[i - 1][j]) {
            i--;
        } else if(len_calculator[i][j] == len_calculator[i][j - 1]) {
            j--;
        } else {
            ret[index--] = s2[i - 1];
            i--;
            j--;
        }
    }
    return ret;
}

全部评论

相关推荐

鼠鼠没有找到暑期实习,简历太空了,感觉直接去秋招会完蛋,这个时间点找个日常实习混个简历,边实习边准备秋招有没有搞头啊
梦想是成为七海千秋:可以的完全可以的,找不到暑期就找日常,秋招之前还是有很多时间可以实习的,哪怕只实习了一个月都可以写在简历上
点赞 评论 收藏
分享
05-12 22:16
已编辑
北京邮电大学 研发工程师
牛客302360988号:0offer+1 滴滴都不给我面 佬没投鹅吗,鹅应该很喜欢北邮吧
投递美团等公司10个岗位
点赞 评论 收藏
分享
墨西哥大灰狼:如果你的校友卤馆还在的话,他肯定会给你建议的,可是卤馆注销了@ 程序员卤馆
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务