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 次瀏覽

開啟你的 職業生涯

透過完成課程獲得認證

開始學習
廣告