#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
bool isPalindrome(string s)
{
if (s.length()<2) // empty strings and singles chars are no palindromes !
return false;
for (auto f=s.cbegin(), r=s.cend()-1; f!=r; r--) {
if (*f!=*r) // if the nth letter from start doesn't match nth from ens
return false; // not a palindrom
if (++f==r) // if middle of string is between two chars
break;
}
return true; // we meet in the middle so it's a palindrome
}
int startWithPalindome(const string a)
{
if (a.length()>1)
{
for (int N = a.rfind(a[0]); N!=string::npos && N>0; N= a.rfind(a[0],N-1) ) {
if ( isPalindrome(a.substr(0,N+1)) )
return N+1;
}
}
return -1;
}
int main() {
string s1 = "ABBA";
string s2 = "ABXBA";
string s3 = "ABCA";
cout << "Testing isPalindrome():"<<endl;
cout <<" "<< s1 << ": " << (isPalindrome(s1) ? "Ok":"fail") <<endl;
cout <<" "<< s2 << ": " << (isPalindrome(s2) ? "Ok":"fail") <<endl;
cout <<" "<< s3 << ": " << (isPalindrome(s3) ? "Fail":"Ok") <<endl;
cout <<endl;
string b1=s1+"BLABL";
string b2=s2+"BLABLA";
string b3=s3+"BLABL";
cout << "Testing sart :"<<endl;
cout <<" "<< b1 << ": " << startWithPalindome(b1)<<endl;
cout <<" "<< b2 << ": " << startWithPalindome(b2)<<endl;
cout <<" "<< b3 << ": " << startWithPalindome(b3)<<endl;
// your code goes here
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8c3RyaW5nPgojaW5jbHVkZSA8YWxnb3JpdGhtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKYm9vbCBpc1BhbGluZHJvbWUoc3RyaW5nIHMpCnsKICAgIGlmIChzLmxlbmd0aCgpPDIpICAgIC8vIGVtcHR5IHN0cmluZ3MgYW5kIHNpbmdsZXMgY2hhcnMgYXJlIG5vIHBhbGluZHJvbWVzICEKICAgICAgICByZXR1cm4gZmFsc2U7ICAgCiAgICBmb3IgKGF1dG8gZj1zLmNiZWdpbigpLCByPXMuY2VuZCgpLTE7IGYhPXI7ICByLS0pIHsKICAgIAlpZiAoKmYhPSpyKSAgICAgLy8gaWYgdGhlIG50aCBsZXR0ZXIgZnJvbSBzdGFydCBkb2Vzbid0IG1hdGNoIG50aCBmcm9tIGVucwogICAgCSAgICByZXR1cm4gZmFsc2U7ICAgIC8vIG5vdCBhIHBhbGluZHJvbQogICAgCWlmICgrK2Y9PXIpICAgIC8vIGlmIG1pZGRsZSBvZiBzdHJpbmcgaXMgYmV0d2VlbiB0d28gY2hhcnMKICAgIAkJYnJlYWs7ICAgICAKICAgIH0KICAgIHJldHVybiB0cnVlOyAgIC8vIHdlIG1lZXQgaW4gdGhlIG1pZGRsZSBzbyBpdCdzIGEgcGFsaW5kcm9tZSAKfQoKaW50IHN0YXJ0V2l0aFBhbGluZG9tZShjb25zdCBzdHJpbmcgYSkKewoJaWYgKGEubGVuZ3RoKCk+MSkKCXsKICAgICAgICBmb3IgKGludCBOID0gYS5yZmluZChhWzBdKTsgTiE9c3RyaW5nOjpucG9zICYmIE4+MDsgTj0gYS5yZmluZChhWzBdLE4tMSkgKSB7CiAgICAgICAgICAgIGlmICggaXNQYWxpbmRyb21lKGEuc3Vic3RyKDAsTisxKSkgKQogICAgICAgICAgICAgICAgcmV0dXJuIE4rMTsKICAgICAgICB9Cgl9CgogICAgcmV0dXJuIC0xOwp9CgppbnQgbWFpbigpIHsKCXN0cmluZyBzMSA9ICJBQkJBIjsKCXN0cmluZyBzMiA9ICJBQlhCQSI7CglzdHJpbmcgczMgPSAiQUJDQSI7CgkKCWNvdXQgPDwgIlRlc3RpbmcgaXNQYWxpbmRyb21lKCk6Ijw8ZW5kbDsgCgljb3V0IDw8IiAgIjw8IHMxIDw8ICI6ICIgPDwgKGlzUGFsaW5kcm9tZShzMSkgPyAiT2siOiJmYWlsIikgPDxlbmRsOyAKCWNvdXQgPDwiICAiPDwgczIgPDwgIjogIiA8PCAoaXNQYWxpbmRyb21lKHMyKSA/ICJPayI6ImZhaWwiKSA8PGVuZGw7IAoJY291dCA8PCIgICI8PCBzMyA8PCAiOiAiIDw8IChpc1BhbGluZHJvbWUoczMpID8gIkZhaWwiOiJPayIpIDw8ZW5kbDsKCWNvdXQgPDxlbmRsOyAKCQoJc3RyaW5nIGIxPXMxKyJCTEFCTCI7IAoJc3RyaW5nIGIyPXMyKyJCTEFCTEEiOyAKCXN0cmluZyBiMz1zMysiQkxBQkwiOwoKCWNvdXQgPDwgIlRlc3Rpbmcgc2FydCA6Ijw8ZW5kbDsgCgljb3V0IDw8IiAgIjw8IGIxIDw8ICI6ICIgPDwgc3RhcnRXaXRoUGFsaW5kb21lKGIxKTw8ZW5kbDsgIAoJY291dCA8PCIgICI8PCBiMiA8PCAiOiAiIDw8IHN0YXJ0V2l0aFBhbGluZG9tZShiMik8PGVuZGw7ICAKCWNvdXQgPDwiICAiPDwgYjMgPDwgIjogIiA8PCBzdGFydFdpdGhQYWxpbmRvbWUoYjMpPDxlbmRsOyAgCgkKCS8vIHlvdXIgY29kZSBnb2VzIGhlcmUKCXJldHVybiAwOwp9