首頁  >  文章  >  後端開發  >  遞歸程式在C++中插入一個星號在一對相同字元之間

遞歸程式在C++中插入一個星號在一對相同字元之間

WBOY
WBOY轉載
2023-09-04 12:57:131410瀏覽

遞歸程式在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當作從索引0到i的子字串。

  • 將tmp2作為從索引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 + &#39;*&#39; + 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++中插入一個星號在一對相同字元之間的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:tutorialspoint.com。如有侵權,請聯絡admin@php.cn刪除