在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 次浏览

开启你的职业生涯

完成课程获得认证

开始学习
广告