如何使用递归打印最长公共子序列中涉及的字符串?
How to print string involved in Longest common sub sequence using Recursion?
我有一个"最长的公共子序列"的代码,但我不仅想要最长的长度,还想要使用递归参与其中的字符串。
任何帮助将不胜感激。
下面的代码将只给出最长的长度。
#include<iostream>
#include<string>
using namespace std;
int longest_seq( string s1, string s2, int n1, int n2)
{
if( n1 < 0 || n2 < 0)
return 0;
// If last char of both the string matches
if( s1[n1] == s2[n2])
return ( 1 + longest_seq(s1, s2, n1-1, n2-1));
else
return max(longest_seq(s1, s2, n1-1, n2),longest_seq(s1, s2, n1, n2-1));
}
int main()
{
string s1 = "AGGTAB";
string s2 = "GXTXAYB";
int n1 = s1.length();
int n2 = s2.length();
cout <<longest_seq(s1, s2, n1-1, n2-1);
return 0;
}
电流输出 :
4
预期产出:
4
GTAB
一种粗略的方法是在longest_seq()
函数中传递一个空字符串,该函数将使用公共子序列填充字符串。
基本上你是这样做的——
int main()
{
string s1 = "AGGTAB";
string s2 = "GXTXAYB";
string out;
int n1 = s1.length();
int n2 = s2.length();
// Pass out as an input param
cout <<longest_seq(s1, s2, n1-1, n2-1, out) << endl;
cout << out << endl;
return 0;
}
你也需要改变longest_seq()
。
int longest_seq( string s1, string s2, int n1, int n2, string& out)
{
if( n1 < 0 || n2 < 0)
return 0;
// If last char of both the string matches
if( s1[n1] == s2[n2]) {
out.insert(0, 1, s1[n1]); // Push the matching character in front
return ( 1 + longest_seq(s1, s2, n1-1, n2-1, out));
} else {
string out1, out2; // temporary strings
int len1 = longest_seq(s1, s2, n1-1, n2, out1);
int len2 = longest_seq(s1, s2, n1, n2-1, out2);
out.insert(0, len1>len2 ? out1 : out2); // Add the correct one to the front
return max(len1, len2);
}
}
输出:
4
GTAB
您还可以更改函数以返回字符串,而不是将输出字符串作为参数传递。然后在函数返回后,您可以轻松检查函数输出的长度,以获得最长的公共子序列长度。您可以轻松地为此进行必要的更改。
相关文章:
- 有没有办法将字符串打印为文字?
- 如何通过标准字符串打印 ostream 变量的值?
- 这个随机字符串打印代码有什么问题?
- 比较 C++ 字符串打印中的两个整数数组
- 在C++中从后缀表达式字符串打印单个操作
- 没有得到 ASCII 编号 = 7 的字符串打印输出
- C++字符串到字符串打印不正确,无法获取 unicode 路径
- 如何从数组 c++ 中的字符串打印第 N 个字符
- 将 LPCWSTR 字符串打印到文件
- C++正在将DWORD_PTR*字符串打印到文件中
- 使用#define字符串打印f和警告
- 使用格式字符串打印类
- 如何将字符转换为字符串,并从字符串打印到main函数
- 将vector中结构体的成员字符串打印到cout流
- fprintf() / std::cout 不会将部分字符串打印到 stdout/stderr
- 为什么ostream为定义为' volatile char[] '的字符串打印' 1 ' ?
- c++文件读取和字符串打印
- 如何使用一个字符串打印此unicode行
- 按字符串打印日期
- 如何用c++将字符串打印到控制台