สมมติว่าเรามีสตริง S ที่มีความยาวเท่ากัน n S มีอักขระเพียงสองประเภทคือ 'a' และ 'b' เราต้องการแก้ไขสตริงเพื่อให้ทุกคำนำหน้ามีความยาวมีจำนวนตัวอักษร 'a' และ 'b' เท่ากัน เพื่อให้บรรลุสิ่งนั้น เราสามารถดำเนินการตามจำนวนครั้งได้โดยพลการ:เลือกตำแหน่งบางตำแหน่งในสตริงของเขาและแทนที่ตัวอักษรในตำแหน่งนี้ด้วยตัวอักษรอื่น ส่งคืนสตริงที่อัปเดต
ดังนั้น หากอินพุตเป็น S ="aabbbb" ผลลัพธ์จะเป็น "baabab"
ขั้นตอน
เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -
n := size of S for initialize i := 0, when i < n, update i := i + 2, do: if S[i] is same as S[i + 1], then: (increase ans by 1) S[i] := (if S[i] is same as 'a', then 'b', otherwise 'a') return S
ตัวอย่าง
ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -
#include <bits/stdc++.h>
using namespace std;
string solve(string S){
int n = S.size(), ans = 0;
for (int i = 0; i < n; i += 2)
if (S[i] == S[i + 1]){
ans++;
S[i] = S[i] == 'a' ? 'b' : 'a';
}
return S;
}
int main(){
string S = "aabbbb";
cout << solve(S) << endl;
} อินพุต
"aabbbb"
ผลลัพธ์
baabab