#include <algorithm>
#include <iostream>
#include <iterator>
#include <string>
bool isPalindrome(std::string::const_iterator& start, std::string::const_iterator& end)
{
while (start < end) {
--end;
if (*start != *end) {
return false;
}
++start;
}
return true;
}
bool test(const std::string& s)
{
auto start = s.begin();
auto end = s.end();
if (isPalindrome(start, end)) {
// If we remove the middle character of a palindrome,
// We still have a palindrome.
return true;
}
// Now test if there is a palindrome
// if we skip the mismatch char from the start or from the end.
auto start2 = start;
auto end2 = end;
++start2;
--end;
return isPalindrome(start, end) || isPalindrome(start2, end2);
}
int main()
{
for (const auto& s : {"aba", "aa", "abccdba", "abdccba", "abcd"}) {
std::cout << s << " " << std::boolalpha << test(s) << std::endl;
}
}
I2luY2x1ZGUgPGFsZ29yaXRobT4KI2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8aXRlcmF0b3I+CiNpbmNsdWRlIDxzdHJpbmc+Cgpib29sIGlzUGFsaW5kcm9tZShzdGQ6OnN0cmluZzo6Y29uc3RfaXRlcmF0b3ImIHN0YXJ0LCBzdGQ6OnN0cmluZzo6Y29uc3RfaXRlcmF0b3ImIGVuZCkKewogICAgd2hpbGUgKHN0YXJ0IDwgZW5kKSB7CiAgICAgICAgLS1lbmQ7CiAgICAgICAgaWYgKCpzdGFydCAhPSAqZW5kKSB7CiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9CiAgICAgICAgKytzdGFydDsKICAgIH0KICAgIHJldHVybiB0cnVlOwp9Cgpib29sIHRlc3QoY29uc3Qgc3RkOjpzdHJpbmcmIHMpCnsKICAgIGF1dG8gc3RhcnQgPSBzLmJlZ2luKCk7CiAgICBhdXRvIGVuZCA9IHMuZW5kKCk7CgogICAgaWYgKGlzUGFsaW5kcm9tZShzdGFydCwgZW5kKSkgewogICAgICAgIC8vIElmIHdlIHJlbW92ZSB0aGUgbWlkZGxlIGNoYXJhY3RlciBvZiBhIHBhbGluZHJvbWUsCiAgICAgICAgLy8gV2Ugc3RpbGwgaGF2ZSBhIHBhbGluZHJvbWUuCiAgICAgICAgcmV0dXJuIHRydWU7CiAgICB9CiAgICAvLyBOb3cgdGVzdCBpZiB0aGVyZSBpcyBhIHBhbGluZHJvbWUKICAgIC8vIGlmIHdlIHNraXAgdGhlIG1pc21hdGNoIGNoYXIgZnJvbSB0aGUgc3RhcnQgb3IgZnJvbSB0aGUgZW5kLgogICAgYXV0byBzdGFydDIgPSBzdGFydDsKICAgIGF1dG8gZW5kMiA9IGVuZDsKICAgICsrc3RhcnQyOwogICAgLS1lbmQ7CiAgICByZXR1cm4gaXNQYWxpbmRyb21lKHN0YXJ0LCBlbmQpIHx8IGlzUGFsaW5kcm9tZShzdGFydDIsIGVuZDIpOwp9CgppbnQgbWFpbigpCnsKICAgIGZvciAoY29uc3QgYXV0byYgcyA6IHsiYWJhIiwgImFhIiwgImFiY2NkYmEiLCAiYWJkY2NiYSIsICJhYmNkIn0pIHsKICAgICAgICBzdGQ6OmNvdXQgPDwgcyA8PCAiICIgPDwgc3RkOjpib29sYWxwaGEgPDwgdGVzdChzKSA8PCBzdGQ6OmVuZGw7CiAgICB9Cgp9Cg==