📅  最后修改于: 2023-12-03 14:59:43.133000             🧑  作者: Mango
编写一个 C# 程序,通过字符串查找最长的回文串。
回文是指从前往后读和从后往前读都相同的字符串。例如,'racecar' 就是一个回文。
我们可以使用中心扩展法来查找回文。对于每个字符,我们以它为中心,向左右两边扩展,同时判断两边的字符是否相等。如果相等,说明继续扩展后仍为回文,直到左右两边不相等为止。我们可以用一个变量来记录当前找到的最长回文。
代码如下:
public static string LongestPalindrome(string s)
{
if (string.IsNullOrEmpty(s))
{
return s;
}
int start = 0;
int end = 0;
for (int i = 0; i < s.Length; i++)
{
// 以每个字符为中心扩展
int len1 = Expand(s, i, i);
int len2 = Expand(s, i, i + 1);
// 取两种情况的最大值
int len = Math.Max(len1, len2);
// 如果当前回文长度比已知最长回文长度大,则更新
if (len > end - start)
{
start = i - (len - 1) / 2;
end = i + len / 2;
}
}
return s.Substring(start, end - start + 1);
}
private static int Expand(string s, int left, int right)
{
while (left >= 0 && right < s.Length && s[left] == s[right])
{
left--;
right++;
}
return right - left - 1;
}
string input = "babad";
string result = LongestPalindrome(input);
Console.WriteLine(result); // "bab"
通过中心扩展法,我们可以快速查找一个字符串中的最长回文。C# 语言提供了丰富的字符串操作方法,使得我们可以轻松地实现这个算法。