问题:
两种水果杂交出一种新水果,现在给新水果取名,要求这个名字中包含了以前两种水果名字的字母,并且这个名字要尽量短。也就是说以前的一种水果名字arr1是新水果名字arr的子序列,另一种水果名字arr2也是新水果名字arr的子序列。设计一个算法求arr。
例如:
输入以下3组水果名称:
apple peach
ananas banana
pear peach
输出的新水果名称如下:
appleach
bananas
pearch
分析:
- 先求 a r r 1 arr1 arr1和 a r r 2 arr2 arr2的最长公共子序列
- 递归输出水果名称
代码如下:
#include <iostream>
#include <vector>
using namespace std;
string arr1, arr2; //记录两个水果名字
void display(int i, int j, vector<vector<int>> comp){
//根据comp数组输出新水果名称
if (i == 0 && j == 0) {
//输出完成
return;
}
if (i == 0) {
//arr1输出完成
display(i, j-1, comp);
cout << arr2[j-1]