我分配了一个任务来查找字符串“ 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/ 但我对仅从程序中复制并不真正感兴趣,因为这对我没有帮助。它也只能完成我想做的一半。
从赋值提示符看来,此示例中打印的前三个字符串都在那里,并且仅向后三个相同。反转字符串不会得到那些向后的子字符串,那么如何计算呢?
答案 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循环,如果找到一个匹配项,就像发现我们所有人一开始就做过的常见子字符串的程序一样。