C++递归程序在相同字符对之间插入星号


给定一个输入字符串 str1。目标是在输入字符串中一对相同字符之间插入一个“*”,并使用递归方法返回结果字符串。

如果输入字符串为 str1= **"wellness"**,则输出将为 **"wel*lnes*s"**

示例

**输入** − str1="happiness"

**输出** − 添加*后的字符串: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 之间添加 * 将得到结果字符串 **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 作为 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

更新时间: 2021年11月3日

624 次浏览

开启你的 职业生涯

通过完成课程获得认证

开始学习
广告