题解 | #NC92-最长公共子串#

最长公共子串

http://www.nowcoder.com/practice/f33f5adc55f444baa0e0ca87ad8a6aac

class Solution {
public:
    /**
     * longest common substring
     * @param str1 string字符串 the string
     * @param str2 string字符串 the string
     * @return string字符串
     */
    string LCS(string s1, string s2) {
        // write code here
        vector<vector<int>> maxLen(s1.size() + 1, vector<int>(s2.size() + 1, 0)); // 增加外圈0,方便讨论边界
        int str_len = 0, str_end_idx = 0; // 记录最长子串长度及结束index
        for (int i = 0; i < s1.size(); i++)
            for (int j = 0; j < s2.size(); j++) {
                if (s1[i] == s2[j]) {
                    maxLen[i + 1][j + 1] = maxLen[i][j] + 1;
                    if (maxLen[i + 1][j + 1] > str_len) {
                        str_len++;
                        str_end_idx = i;
                    } // 当有很多个子串时,找最长的那个
                       
                }

                else
                    maxLen[i + 1][j + 1] = 0; // 构建最小公共子串的长度矩阵,0表示该元素不在子串内
            }
//         for (int i = 0; i < s1.size(); i++) {
//             for (int j = 0; j < s2.size(); j++)
//                 cout << maxLen[i + 1][j + 1] << " ";
//             cout << endl;
//         }
        return s1.substr(str_end_idx - str_len + 1, str_len);
    }
};

全部评论

相关推荐

Southyeung:我说一下我的看法(有冒犯实属抱歉):(1)简历不太美观,给我一种看都不想看的感觉,感觉字体还是排版问题;(2)numpy就一个基础包,机器学习算法是什么鬼?我感觉你把svm那些写上去都要好一点。(2)课程不要写,没人看,换成获奖经历;(3)项目太少了,至少2-3个,是在不行把网上学习的也写上去。
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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