题解 | #查找两个字符串a,b中的最长公共子串# 哈希

查找两个字符串a,b中的最长公共子串

https://www.nowcoder.com/practice/181a1a71c7574266ad07f9739f791506

#include <iostream>
#include <unordered_set>
#include <string>
using namespace std;

int main() {
    string str1, str2;
    cin >> str1 >> str2;
    // 记录长str和短str
    string str = str1, strShort = str2;
    if (str1.size() < str2.size()) {
        str = str2;
        strShort = str1;
    }
    // 遍历长string,然后存hash map
    unordered_set<string> strSet;
    for (int i = 0; i < str.size(); i++) {
        for (int j = 1; j <= str.size(); j++) {
            strSet.insert(str.substr(i, j - i));
        }
    }
    string res;
    int maxLen = 0;
    // 遍历较短的string,记录最大的公共子串的位置
    for (int i = 0; i < strShort.size(); i++) {
        for (int j = 1; j <= strShort.size(); j++) {
            auto subStr = strShort.substr(i, j - i);
            if (strSet.count(subStr) && subStr.size() > maxLen) {
                res = subStr;
                maxLen = subStr.size();
            }
        }
    }
    cout << res << endl;
    return 0;
}
// 64 位输出请用 printf("%lld")

全部评论

相关推荐

不愿透露姓名的神秘牛友
06-11 13:34
offe从四面八方来:我真的没时间陪你闹了
点赞 评论 收藏
分享
认真搞学习:28小登的建议,投算法岗不要写什么物理竞赛,互联网+,多写点项目,用什么算法做了什么。还有本科算法是不可能的开发你这个也没有项目啊
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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