字符串问题:输出第二个字符串在第一个字符串中的连接次序

该博客介绍了一个C++编程问题,涉及字符串处理。给定两个字符串,任务是输出第二个字符串在第一个字符串中的连接次序。通过计算每个字符在第一个字符串中的位置并使用递归算法生成所有可能的组合,解决了长字符串情况下避免多重循环的问题。提供了完整的C++代码实现。
摘要由CSDN通过智能技术生成

问题描述:输入两个字符串,输出第二个字符串在第一个字符串中的连接次序。如输入: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

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值