using System.Collections.Generic;
using System.Linq;
using static PalindromeChecker;
static class PalindromeChecker {
public static string LongestPalindrome(IEnumerable<string> strings) {
return strings.Select(LongestPalindromeSubstring).Max();
}
public static bool IsPalindrome(string s) {
return s == new string(s.Reverse().ToArray());
}
public static string AsString(this IEnumerable<char> source) {
return new string(source.ToArray());
}
public static string LongestPalindromeSubstring(string s) {
var end = s.Length;
var start = 0;
var longestString = s.Take(1).AsString();
while ((end-start) > longestString.Length) {
while ((end - start) > longestString.Length) {//
var subs = s.Skip(start).Take(end--).AsString();
if (IsPalindrome(subs)) {
longestString = subs;
}
}
start++;
end = s.Length;
}
return longestString;
}
}
public class Test {
public static void Main() {
var list = new List<string> { "aabbaa","carracecar", "aabbbabab" };
System.Console.WriteLine(LongestPalindrome(list));
}
}
dXNpbmcgU3lzdGVtLkNvbGxlY3Rpb25zLkdlbmVyaWM7CnVzaW5nIFN5c3RlbS5MaW5xOwp1c2luZyBzdGF0aWMgUGFsaW5kcm9tZUNoZWNrZXI7CgpzdGF0aWMgY2xhc3MgUGFsaW5kcm9tZUNoZWNrZXIgewogICAgcHVibGljIHN0YXRpYyBzdHJpbmcgTG9uZ2VzdFBhbGluZHJvbWUoSUVudW1lcmFibGU8c3RyaW5nPiBzdHJpbmdzKSB7CiAgICAgICAgcmV0dXJuIHN0cmluZ3MuU2VsZWN0KExvbmdlc3RQYWxpbmRyb21lU3Vic3RyaW5nKS5NYXgoKTsKICAgIH0KCiAgICBwdWJsaWMgc3RhdGljIGJvb2wgSXNQYWxpbmRyb21lKHN0cmluZyBzKSB7CiAgICAgICAgcmV0dXJuIHMgPT0gbmV3IHN0cmluZyhzLlJldmVyc2UoKS5Ub0FycmF5KCkpOwogICAgfQoKICAgIHB1YmxpYyBzdGF0aWMgc3RyaW5nIEFzU3RyaW5nKHRoaXMgSUVudW1lcmFibGU8Y2hhcj4gc291cmNlKSB7CiAgICAgICAgcmV0dXJuIG5ldyBzdHJpbmcoc291cmNlLlRvQXJyYXkoKSk7CiAgICB9CgogICAgcHVibGljIHN0YXRpYyBzdHJpbmcgTG9uZ2VzdFBhbGluZHJvbWVTdWJzdHJpbmcoc3RyaW5nIHMpIHsKICAgICAgICB2YXIgZW5kID0gcy5MZW5ndGg7CiAgICAgICAgdmFyIHN0YXJ0ID0gMDsKICAgICAgICB2YXIgbG9uZ2VzdFN0cmluZyA9IHMuVGFrZSgxKS5Bc1N0cmluZygpOwogICAgICAgIHdoaWxlICgoZW5kLXN0YXJ0KSA+IGxvbmdlc3RTdHJpbmcuTGVuZ3RoKSB7CiAgICAgICAgICAgIHdoaWxlICgoZW5kIC0gc3RhcnQpID4gbG9uZ2VzdFN0cmluZy5MZW5ndGgpIHsvLwogICAgICAgICAgICAgICAgdmFyIHN1YnMgPSBzLlNraXAoc3RhcnQpLlRha2UoZW5kLS0pLkFzU3RyaW5nKCk7CiAgICAgICAgICAgICAgICBpZiAoSXNQYWxpbmRyb21lKHN1YnMpKSB7CiAgICAgICAgICAgICAgICAgICAgbG9uZ2VzdFN0cmluZyA9IHN1YnM7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgc3RhcnQrKzsKICAgICAgICAgICAgZW5kID0gcy5MZW5ndGg7CiAgICAgICAgfQogICAgICAgIHJldHVybiBsb25nZXN0U3RyaW5nOwogICAgfQp9CgpwdWJsaWMgY2xhc3MgVGVzdCB7CglwdWJsaWMgc3RhdGljIHZvaWQgTWFpbigpIHsKCQl2YXIgbGlzdCA9IG5ldyBMaXN0PHN0cmluZz4geyAiYWFiYmFhIiwiY2FycmFjZWNhciIsICJhYWJiYmFiYWIiIH07CgkJU3lzdGVtLkNvbnNvbGUuV3JpdGVMaW5lKExvbmdlc3RQYWxpbmRyb21lKGxpc3QpKTsKCX0KfQ==