在C++中列印最接近的字串,該字串不包含相鄰的重複字元


在這個問題中,我們得到一個字串。我們的任務是列印一個最接近當前字串的字串,並且該字串不包含任何相鄰的重複字元。

讓我們舉個例子來理解這個問題

Input: string = “good”
Output: goad

在這個例子中,我們發現索引1和2處的元素相同,所以我們更改索引2處的元素。

為了解決這個問題,我們將遍歷字串並檢查是否有任何兩個相鄰元素相同。如果是,則更改第二個元素(如果第i個和第i+1個元素相同,則更改第i+1個元素)。解決這個問題將使用貪心演算法,對於每對相鄰的相似元素,我們將進行一次更改。我們必須記住的一件事是在更改時檢查所有附近的元素,即如果我們正在更改第i個元素,則更改後第i+1個和第i個元素應該不同。

示例

程式展示了我們解決方案的實現:

 線上演示

#include <iostream>
#include <string.h>
using namespace std;
void printStringWithNoDuplicates(string str){
   int len = str.length();
   for (int i = 1; i < len; i++){
      if (str[i] == str[i - 1]){
         str[i] = 'a';
         while (str[i] == str[i - 1] || (i + 1 < len && str[i] == str[i + 1])) str[i]++;
         i++;
      }
   }
   cout<<str;
}
int main(){
   string str = "good";
   cout<<"The orignal string is : "<<str<<endl;
   cout<<"String without adjecent duplicate characters is : ";
   printStringWithNoDuplicates(str);
   return 0;
}

輸出

The orignal string is : good
String without adjecent duplicate characters is : goad

更新於:2020年1月27日

111 次瀏覽

開啟你的職業生涯

完成課程獲得認證

開始學習
廣告