我今天写的方法不能求出所有的可能,只能求其中的一种,一个字符串可能有多个回文字符串。
比如“babad”,它的回文字符串就有两个,“bab”“aba”,这里我只求出第一种。
static string Move(string s)
{
if (s.Length <= 1) return s;
int maxLen = 1, start = 0;
int index = 0;
while (index + 1 < s.Length)
{
//查找第一个不等于当前的字符
int i = index - 1,
j = index + 1;
while (s[j] == s[index])
j++;
index = j;//更新下一次检查的位置
while (j < s.Length && i >= 0 && s[j] == s[i])
{
j++; i--;
}
int len = j - i - 1;//当前回文长度
if (len > maxLen)
{ maxLen = len; start = i + 1; }
//判断后面是否还有没有必要遍历
if (index + maxLen / 2 > s.Length) break;
}
return s.Substring(start, maxLen);
}