在 C++ 中的一对相同字符之间插入星号的递归程序
给定一个字符串str1作为输入。目标是在输入字符串中的一对相同字符之间插入一个“*”,并使用递归方法返回结果字符串。
如果输入字符串是str1="wellness"那么输出将是"wel*lnes*s"
例子
输入 -str1="幸福"
输出 -添加*后的字符串:hap*pines*s
说明 -在pp和ss对之间添加*将为我们提供结果字符串hap*pines*s
输入 -str1=”swimmmminggggpooool”
输出 -添加*后的字符串:swim*m*m*ming*g*g*gpo*o*o*ol
说明-在mm、gg和oo对之间添加*将为我们提供结果字符串游泳*m*m*ming*g*g*gpo*o*o*ol
下面程序中使用的方法如下
在这种方法中采用字符串str1。在每次迭代中,以当前索引为中点将str1一分为二。如果第一个子串的最后一个字符与下一个子串的第一个字符相同,则将原始字符串设置为子串1后跟'*'后跟子串2。如果substring2的长度为0,则结束递归。
取输入字符串为str1,计算长度为len。
函数addStar(string&s1,inti,intlen1)将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