আমাদের কাছে একটি প্যালিনড্রোমিক স্ট্রিং palindrome আছে, আমাদেরকে ঠিক একটি ক্যারেক্টারকে যেকোনো ছোট হাতের ইংরেজি অক্ষরে প্রতিস্থাপন করতে হবে যাতে স্ট্রিংটি লেক্সিকোগ্রাফিক্যালি সবচেয়ে ছোট সম্ভাব্য স্ট্রিং হয় যা প্যালিনড্রোম নয়। এরপর ফাইনাল স্ট্রিংটি খুঁজে বের করতে হবে। যদি এটি করার কোনো উপায় না থাকে, তবে খালি স্ট্রিং রিটার্ন করুন। উদাহরণস্বরূপ, ইনপুট যদি "abccba" হয়, তবে আউটপুট হবে "aaccba"।
সমাধানের ধাপসমূহ
changed := false- যদি স্ট্রিংয়ের সাইজ ১ হয়, তবে খালি স্ট্রিং রিটার্ন করুন।
i := 0এবংj := length of s - 1leftA := TrueএবংrightA := Truewhile i < j:- যদি
s[i]'a'না হয়, তবেs[i]-কে'a'করুন এবংsরিটার্ন করুন। i-কে ১ বাড়ান এবংj-কে ১ কমান।
- যদি
s[size of s - 1] := 'b'sরিটার্ন করুন।
উদাহরণ (C++)
নিচের ইমপ্লিমেন্টেশনটি দেখুন ভালোভাবে বুঝতে -
#include <bits/stdc++.h>
using namespace std;
class Solution {
public:
string breakPalindrome(string s) {
bool changed = false;
if(s.size() == 1) return "";
int i = 0, j = s.size() - 1;
bool leftA = true;
bool rightA = true;
while(i < j){
if(s[i] != 'a'){
s[i] = 'a';
return s;
}
i++;
j--;
}
s[s.size() - 1] = 'b';
return s;
}
};
int main(){
Solution ob;
cout << (ob.breakPalindrome("abccba"));
}
ইনপুট
"abccba"
আউটপুট
aaccba