给定一个字符串str1作为输入。目标是在输入字符串中的一对相同字符之间插入一个“*”,并使用递归方法返回结果字符串。
如果输入字符串是str1 = “wellness”,那么输出将是“wel*lnes*s”
示例
输入 – str1 = “happiness”
输出 – 添加*后的字符串:hap*pines*s
立即学习“C++免费学习笔记(深入)”;
解释 – 在pp和ss之间添加*将得到结果字符串hap*pines*s
输入 – str1 = ”swimmmmingggg pooool”
输出 – 添加*后的字符串:swim*m*m*ming*g*g*g po*o*o*ol
解释 – 在mm、gg和oo之间添加*将得到结果字符串swim*m*m*ming*g*g*g po*o*o*ol
下面程序中使用的方法如下
在这个方法中,取字符串str1。在每次迭代中,以当前索引为中点将str1分为两部分。如果第一个子字符串的最后一个字符与下一个子字符串的第一个字符相同,则将原始字符串设置为子字符串1后跟着“*”,再跟着子字符串2。如果子字符串2的长度为0,则结束递归。
将输入字符串作为str1,并计算其长度为len。
函数addStar(string& s1, int i, int len1)接受s1、它的长度和当前索引作为输入,并在两对字符相同时添加*。
将tmp1作为从索引0到i的子字符串。
将tmp2作为从索引i到len1 + 1的子字符串。
如果tmp1的最后一个字符和tmp2的第一个字符相等,则设置s1=tmp1+’*’+tmp2。
为下一次迭代调用addStar(s1, i+1, len1)。
最后在main函数中打印str1。
示例
#include 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 * : a*ab*bc*c*cd*d*d*d登录后复制
以上就是递归程序在C++中插入一个星号在一对相同字符之间的详细内容,更多请关注【创想鸟】其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。
发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2583909.html