在 C++ 中的一对相同字符之间插入星号的递归程序
给定一个字符串 str1 作为输入。目标是在输入字符串中的一对相同字符之间插入一个“*”,并使用递归方法返回结果字符串。
如果输入字符串是 str1= "wellness"那么输出将是"wel*lnes*s"
例子
输入 - str1="幸福"
输出 - 添加 * 后的字符串:hap*pines*s
说明 - 在 pp 和 ss 对之间添加 * 将为我们提供结果字符串hap*pines*s
输入 - str1=”swimmmmingggg pooool”
输出 - 添加 * 后的字符串:swim*m*m*ming*g*g*g po*o*o*ol
说明- 在 mm、gg 和 oo 对之间添加 * 将为我们提供结果字符串游泳*m*m*ming*g*g*g po*o*o*ol
下面程序中使用的方法如下
在这种方法中采用字符串 str1。在每次迭代中,以当前索引为中点将 str1 一分为二。如果第一个子串的最后一个字符与下一个子串的第一个字符相同,则将原始字符串设置为子串 1 后跟 '*' 后跟子串 2。如果 substring2 的长度为 0,则结束递归。
取输入字符串为str1,计算长度为len。
函数 addStar(string& s1, int i, int len1) 将 s1、其长度和当前索引作为输入,如果两对字符相同,则添加 *。
将 tmp1 作为 s1 从索引 0 到 i 的子串
将 tmp2 作为 s1 从索引 i 到 len1 + 1 的子串。
如果 tmp1 的最后一个字符和 tmp2 的第一个字符相等,则设置 s1=tmp1+'*'+tmp2。
调用 addStar(s1, i+1, len1); 用于下一次迭代。
最后在 main 中打印 str1。
示例
#include <iostream>输出结果using namespace std;
void addStar(string& s1, int i, int len1){
string tmp1=s1.substr(0,i);
string tmp2=s1.substr(i,len1+1);
if (tmp2.length() == 0){
return;
}
if (tmp1[i-1] == tmp2[0]){
s1 = tmp1 + '*' + tmp2;
}
addStar(s1, i+1, len1);
}
int main(){
string str1 = "aabbcccdddd";
int len=str1.length();
addStar(str1, 0, len-1);
cout << "String after adding * : "<<str1 << endl;
return 0;
}
如果我们运行上面的代码,它将生成以下输出
String after adding * : a*ab*bc*c*cd*d*d*d
以上是 在 C++ 中的一对相同字符之间插入星号的递归程序 的全部内容, 来源链接: utcz.com/z/343704.html