在 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

回到顶部