#include <iostream>
#include <string>
#include <vector>
#include <iterator>
using namespace std;
bool checkPalindrome( const string& str) {
for ( auto p = str.begin ( ) , q = str.end ( ) ; p! = q && p! = q+ 1 ; p++ )
if ( * p! = *-- q) // if char from front doesn't match char from rear ?
return false ; // then it's not a palindrome !
return true ;
}
int main( ) {
vector< string> str { "level" , "deed" , "leaf" , "dead" ,"" ,"e" ,"de" } ;
vector< bool > expected { true , true , false , false , true , true , false } ;
for ( size_t i = 0 ; i< str.size ( ) ; i++ ) {
bool test = checkPalindrome( str[ i] ) ;
cout << str[ i] << " would " << ( test? "" : "not " ) << "be a palindrome: "
<< ( test== expected[ i] ? "correct!" : "FAILURE!!!" ) << endl;
}
char * s= "blaalb" ;
cout << checkPalindrome( s) ; // no problem ! gets converted
return 0 ;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8c3RyaW5nPgojaW5jbHVkZSA8dmVjdG9yPgojaW5jbHVkZSA8aXRlcmF0b3I+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7Cgpib29sIGNoZWNrUGFsaW5kcm9tZShjb25zdCBzdHJpbmcmIHN0cikgewogICAgZm9yIChhdXRvIHAgPSBzdHIuYmVnaW4oKSwgcSA9IHN0ci5lbmQoKTsgIHAhPXEgJiYgcCE9cSsxOyBwKysgICkgCiAgICAgICAgaWYgKCpwIT0qLS1xKSAgICAgICAvLyBpZiBjaGFyIGZyb20gZnJvbnQgZG9lc24ndCBtYXRjaCBjaGFyIGZyb20gcmVhciA/CiAgICAgICAgICAgIHJldHVybiBmYWxzZTsgICAvLyB0aGVuIGl0J3Mgbm90IGEgcGFsaW5kcm9tZSAhCiAgICByZXR1cm4gdHJ1ZTsKfQoKaW50IG1haW4oKXsKICAgIHZlY3RvcjxzdHJpbmc+IHN0ciB7ICJsZXZlbCIsICJkZWVkIiwgImxlYWYiLCAiZGVhZCIsIiIsImUiLCJkZSIgfTsgCiAgICB2ZWN0b3I8Ym9vbD4gZXhwZWN0ZWQgeyB0cnVlLCB0cnVlLCBmYWxzZSwgZmFsc2UsIHRydWUsIHRydWUsIGZhbHNlIH07CiAgICAKICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpPCBzdHIuc2l6ZSgpOyBpKyspIHsKICAgIAlib29sIHRlc3QgPSBjaGVja1BhbGluZHJvbWUoc3RyW2ldKTsgCiAgICAJY291dCA8PCBzdHJbaV0gPDwgIiB3b3VsZCAiIDw8ICh0ZXN0PyIiOiJub3QgIikgPDwgImJlIGEgcGFsaW5kcm9tZTogIiAKICAgIAkgICAgIDw8ICh0ZXN0PT1leHBlY3RlZFtpXT8iY29ycmVjdCEiOiJGQUlMVVJFISEhIik8PGVuZGw7CiAgICB9CiAgICAKICAgIGNoYXIgKnM9ImJsYWFsYiI7IAogICAgY291dCA8PCBjaGVja1BhbGluZHJvbWUocyk7ICAgICAvLyBubyBwcm9ibGVtICEgZ2V0cyBjb252ZXJ0ZWQgCiAgICByZXR1cm4gMDsKfQo=