इस समस्या में, हमें एक स्ट्रिंग दी गई है। हमारा कार्य एक ऐसी स्ट्रिंग प्रिंट करना है जो वर्तमान स्ट्रिंग के सबसे निकट हो और जिसमें कोई आसन्न डुप्लिकेट कैरेक्टर न हों।
उदाहरण
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 original string is : " << str << endl;
cout << "String without adjacent duplicate characters is : ";
printStringWithNoDuplicates(str);
return 0;
}
आउटपुट
The original string is : good String without adjacent duplicate characters is : goad