打印所有最长匹配的子字符串

时间:2018-08-09 03:34:32

标签: c++ vector

我分配了一个任务来查找字符串“ B D C A B A”和“ A B C B D A B”之间的所有最长匹配子字符串。对此在线有很多部分解决方案,但没有一个能满足我的要求。我创建此字符串是为了找到一个最长的匹配子字符串,但我需要能够找到所有它们,总共应该有6个。

#include <iostream>
#include <string>
#include <vector>

using namespace std;

void myLMS(string one, string two);

int main()
{
    string s1 = "ABCBDAB";
    string s2 = "BDCABA";
    myLMS(s1, s2);
    return 0;
}
void myLMS(string one, string two) {
    vector<vector<char>> lms;
    vector<char> one_lms;
    for (int i = 0; i < two.length(); i++) {
        for (int j = i + 1; j < one.length(); j++) {
            if (two[i] == one[j]) {
                one_lms.push_back(two[i]);
                break;
            }
        }
    }
    lms.push_back(one_lms);
    for (int i = 0; i < lms[0].size(); i++) {
        cout << lms[0][i];
    }
}

我是否可以继续使用此方法并获得所需的结果,还是需要另一种方法?

编辑:我找到了此解决方案https://www.geeksforgeeks.org/printing-longest-common-subsequence-set-2-printing/ 但我对仅从程序中复制并不真正感兴趣,因为这对我没有帮助。它也只能完成我想做的一半。

从赋值提示符看来,此示例中打印的前三个字符串都在那里,并且仅向后三个相同。反转字符串不会得到那些向后的子字符串,那么如何计算呢?

2 个答案:

答案 0 :(得分:1)

您的逻辑还很不完整。这里有一些伪代码可以帮助您入门。

for each character in string 1
  for each character in string 2
    if char_1 == char_2
        possible substring match 
            do the next chars match?
                yes
                    there is a substring - now find longest
                no
                    no substring match, continue the loop

答案 1 :(得分:0)

我无法理解以这种方式解决它的需要,因为输入字符串是固定的,如果从一个字符串的第一个字符到最后一个-1个字符运行循环,并为每个后续字符运行另一个嵌套的for循环,如果找到一个匹配项,就像发现我们所有人一开始就做过的常见子字符串的程序一样。