📜  C# 程序在字符串中查找最长的回文. - C# (1)

📅  最后修改于: 2023-12-03 14:59:43.133000             🧑  作者: Mango

C# 程序在字符串中查找最长的回文

编写一个 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# 语言提供了丰富的字符串操作方法,使得我们可以轻松地实现这个算法。