给定一个字符串 s
,找到 s
中最长的回文子串。你可以假设 s
的最大长度为 1000。
public static string FindLongestPalindrome(string s) {
int length = s.Length;
if (length == 0) return s;
string ret = s[0].ToString();
//从第一个字符开始找,遍历到字符串长度 - 已知最长回文字串长度, 因为剩下的不会是最长字串
for (int i = 0; i < length - ret.Length; i++) {
//从最后一个字符开始匹配
for (int k = length - 1; k > i; k--) {
//如果找到相同字符,并且间隔大于已知最长回文字串长度,开始遍历判断是否为回文串
if (s[k] == s[i] && (k - i + 1) >= ret.Length) {
int id1 = i, id2 = k;
while (id1 <= id2 && s[id1] == s[id2]) {
id1++;
id2--;
}
//如果是回文串,说明长度大于已知的回文串长度,更新返回值
if (id1 > id2) {
ret = s.Substring(i, k - i + 1);
}
}
}
}
return ret;
}