คำอธิบายปัญหา
สมมติว่าเรามีสตริง S ประกอบด้วยตัวอักษรภาษาอังกฤษพิมพ์เล็ก ต้องแทรกตัวอักษร 'a' เข้าไปใน S ทั้งหมด 1 ตัว หลังแทรกแล้วถ้าสามารถทำให้ S ไม่ใช่พาลินโดรมได้ ให้คืนสตริงนั้น มิฉะนั้นคืน "impossible"
ตัวอย่าง: S = "bpapb" ผลลัพธ์คือ "bpaapb"
ขั้นตอนการแก้ปัญหา
ถ้า S + "a" ไม่ใช่พาลินโดรม: คืนค่า S + 'a' มิฉะนั้นถ้า "a" + S ไม่ใช่พาลินโดรม: คืนค่า 'a' + S มิฉะนั้น: คืนค่า "Impossible"
ตัวอย่างโค้ด C++
#include <bits/stdc++.h>
using namespace std;
bool p(const string& s) {
for (int i = 0; i < s.size() / 2; i++)
if (s[i] != s[s.size() - 1 - i])
return false;
return true;
}
string solve(string S) {
if (!p(S + 'a'))
return S + 'a';
else if (!p('a' + S))
return 'a' + S;
else
return "Impossible";
}
int main() {
string S = "bpapb";
cout << solve(S) << endl;
}
อินพุต
"bpapb"
เอาต์พุต
bpapba