/* package whatever; // don't place package name! */
import java.util.*;
import java.lang.*;
import java.io.*;
/* Name of the class has to be "Main" only if the class is public. */
class Ideone
{
return recShortestPalindrome(s, s.length()>>1, 0);
}
static String recShortestPalindrome
(String s,
int mid,
int add
) { // AABBA[X]
int fakeLen = s.length() + add;
for (int i = 0; i < mid; i++) {
char c1 = s.charAt(i);
int p1 = fakeLen - 1 - i;
if (p1 < s.length()) {
char c2 = s.charAt(p1);
if (c2 != c1) {
return recShortestPalindrome(s, mid+1, add+1);
}
}
}
// found a pattern that works
String h1
= s.
substring(0, mid
); String h2
= new StringBuilder
(h1
).
reverse().
toString();
int midPoint = ret.length()/2;
if (ret.length()%2 == 0 && ret.length() >= 4) {
char c1 = ret.charAt(midPoint);
char c2 = ret.charAt(midPoint-1);
if (c1 == c2) {
return ret.substring(0, midPoint) + ret.substring(midPoint+1, ret.length());
}
}
return h1+h2;
}
{
// your code goes here
System.
out.
println(shortestPalindrome
("racec")); }
}
LyogcGFja2FnZSB3aGF0ZXZlcjsgLy8gZG9uJ3QgcGxhY2UgcGFja2FnZSBuYW1lISAqLwoKaW1wb3J0IGphdmEudXRpbC4qOwppbXBvcnQgamF2YS5sYW5nLio7CmltcG9ydCBqYXZhLmlvLio7CgovKiBOYW1lIG9mIHRoZSBjbGFzcyBoYXMgdG8gYmUgIk1haW4iIG9ubHkgaWYgdGhlIGNsYXNzIGlzIHB1YmxpYy4gKi8KY2xhc3MgSWRlb25lCnsKc3RhdGljIFN0cmluZyBzaG9ydGVzdFBhbGluZHJvbWUoU3RyaW5nIHMpIHsKCXJldHVybiByZWNTaG9ydGVzdFBhbGluZHJvbWUocywgcy5sZW5ndGgoKT4+MSwgMCk7Cn0KCnN0YXRpYyBTdHJpbmcgcmVjU2hvcnRlc3RQYWxpbmRyb21lKFN0cmluZyBzLCBpbnQgbWlkLCBpbnQgYWRkKSB7CgkvLyBBQUJCQVtYXQoJaW50IGZha2VMZW4gPSBzLmxlbmd0aCgpICsgYWRkOwoJZm9yIChpbnQgaSA9IDA7IGkgPCBtaWQ7IGkrKykgewoJCWNoYXIgYzEgPSBzLmNoYXJBdChpKTsKCQlpbnQgcDEgPSBmYWtlTGVuIC0gMSAtIGk7CgoJCWlmIChwMSA8IHMubGVuZ3RoKCkpIHsKCQkJY2hhciBjMiA9IHMuY2hhckF0KHAxKTsKCgkJCWlmIChjMiAhPSBjMSkgewoJCQkJcmV0dXJuIHJlY1Nob3J0ZXN0UGFsaW5kcm9tZShzLCBtaWQrMSwgYWRkKzEpOwoJCQl9CgkJfQoJfQoKCS8vIGZvdW5kIGEgcGF0dGVybiB0aGF0IHdvcmtzCglTdHJpbmcgaDEgPSBzLnN1YnN0cmluZygwLCBtaWQpOwoJU3RyaW5nIGgyID0gbmV3IFN0cmluZ0J1aWxkZXIoaDEpLnJldmVyc2UoKS50b1N0cmluZygpOwoKCVN0cmluZyByZXQgPSBoMStoMjsKCglpbnQgbWlkUG9pbnQgPSByZXQubGVuZ3RoKCkvMjsKCglpZiAocmV0Lmxlbmd0aCgpJTIgPT0gMCAmJiByZXQubGVuZ3RoKCkgPj0gNCkgewoJCWNoYXIgYzEgPSByZXQuY2hhckF0KG1pZFBvaW50KTsKCQljaGFyIGMyID0gcmV0LmNoYXJBdChtaWRQb2ludC0xKTsKCgkJaWYgKGMxID09IGMyKSB7CgkJCXJldHVybiByZXQuc3Vic3RyaW5nKDAsIG1pZFBvaW50KSArIHJldC5zdWJzdHJpbmcobWlkUG9pbnQrMSwgcmV0Lmxlbmd0aCgpKTsKCQl9Cgl9CgoJcmV0dXJuIGgxK2gyOwp9CgkKCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluIChTdHJpbmdbXSBhcmdzKSB0aHJvd3MgamF2YS5sYW5nLkV4Y2VwdGlvbgoJewoJCS8vIHlvdXIgY29kZSBnb2VzIGhlcmUKCQlTeXN0ZW0ub3V0LnByaW50bG4oc2hvcnRlc3RQYWxpbmRyb21lKCJyYWNlYyIpKTsKCX0KfQ==