问题描述:输入两个字符串,输出第二个字符串在第一个字符串中的连接次序。如输入:abdbcc和abc,输出:125,126,145,146
问题分析:首先得计算出第二个字符串各个字符在第一个字符串中出现的位置,这个用一个二维的数组或容器就可以实现。比如定义vector<vector<int>> data,求得的位置都存储在了这个data中:data[1]存放字符‘a’在串1中的位置{1};data[2]存放字符‘b’在串1中的位置{2,4};data[3]存放字符‘c’在串1中的位置{5,6}。那么剩下的问题就转换成了,如何从这个data中依次输出字符串2的各个位置。很显然,各个位置是严格递增的。
这时第一反应是串2中的各个字符的位置进行遍历,输出恰当的组合,对于此例而言,遍历三次(写三个for循环就可以了)。但倘若字符串很长呢,如果是100呢,显然不可能去写100个for循环,这时候就应该想到用递归去处理,不管多少个字符,几行代码便可轻松搞定。但递归算法的难点:退出条件和循环体,比较难把握。针对此题,我们可以对字符串2的各个字符在串1中的位置进行递归,当遍历到最后一个字符时,即可输出一个结果。当然,事先我们得准备一个数组或容器result,用来存放每次要输出的位置组合。
好了,废话不多说了,上代码:
#include "stdafx.h"
#include <string>
#include <iostream>
#include <vector>
using namespace std;
void Recursivel