首页 > 解决方案 > 返回最长公共子串函数 c++

问题描述

string longest_common_Substring(string a, string b) {

string best = ""; 
string subString = ""; 
//vector < vector<int>> s[a.length]; 

int max = a.length() + b.length(); 


for (int i = 0; i <= a.length(); i++)
{
    for (int k = 0; k <= b.length() -i - 1; k++)
    {
        subString = a.substr(i, k);
        if (b.find(subString)== true && subString.length() > best.length())
        {
            best = subString;
        }
    }

}

return best; }

我的示例输入是longest_common_Substring("the rain", " in spain"),输出是"in"。正确的输出是“ain”

标签: c++substringc-strings

解决方案


你应该改变你的if状况。string::find返回找到的字符串的位置,或者string::npos如果没有找到字符串。string::find不适用于trueand falsetrue被转换为1。因此,仅当在 中的位置 1 处找到b.find(subString)== true时才为真。您可以使用以下方法验证此行为subStringb

#include <iostream>
#include <string>

int main() {
    std::string a = "Text";

    if (a.find("Text") == true) std::cout << 1 << std::endl;
    if (a.find("ext") == true) std::cout << 2 << std::endl;
    if (a.find("xt") == true) std::cout << 3 << std::endl;
    if (a.find("t") == true) std::cout << 4 << std::endl;
    return 0;
}

输出是2

尝试

b.find(subString) != b.npos

解决您的问题。


推荐阅读