为什么我的代码总是不能正确检测子串中的回文?

问题描述 投票:0回答:1

我正在使用一种算法,该算法应该在给定字符串中找到最长的回文。到目前为止,我已经做了一些研发并得到了一个与我的几乎相似的解决方案。经过一些调整后,到目前为止得到以下结果:

public static string Find_LongestPalindrome(string s)
{
    var charsArray = s.ToCharArray();
    var boolArr = new bool[charsArray.Length, charsArray.Length];
    
    int longestStart = 0;
    int maxLength = 1;
    
    //By default, the matching array indexes are kept true for tracking similar characters
    for (int i = 0; i < charsArray.Length; i++)
    {
        boolArr[i, i] = true;
    }

    for (int i = 0; i < charsArray.Length - 1; i++)
    {
        //This checks if there are matching characters and their length in the given string
        if (charsArray[i] == charsArray[i + 1])
        {
            boolArr[i, i + 1] = true;
            longestStart = i;
            maxLength = 2;
        }
    }

    //Keeps track of the character length that has length of two in a substring
    for (int length = 2; length <= charsArray.Length; length++)
    {
        for (int i = 0; i < charsArray.Length - length + 1; i++)
        {
            int j = i + length - 1;
            if (charsArray[i] == charsArray[j] && boolArr[i + 1, j - 1])
            {
                boolArr[i, j] = true;
                if (maxLength < (j - i))
                {
                    maxLength = j - i;
                    longestStart = i;
                }
            }
        }
    }

    //Returns the substring that's found
    if (s.Length == longestStart + (maxLength + 1))
    {
        return s.Substring(longestStart, maxLength + 1);
    }
    else
    {
        return s = "none";
    }
}

这是我迄今为止所做的小提琴:最长的回文

上述解决方案有效,但无法为以下输入之一获得所需的解决方案:

(这里的逻辑是在给定字符串中找到长度至少为2或更大的最长回文)

输入 1

hellosmithsannas
输出 1
sannas

输入 2
hellosannasmith
输出 2
sannas

输入 3
abcdefgg
输出 3
none

在我的例子中,我尝试的代码能够针对输入 1 和 3 运行。但是对于输入 2,我得到

none
,尽管它应该返回
sannas
,因为最小长度为 2 并且最长的字符串是在一个模式中找到的。这里有什么我错过的吗?

c# algorithm substring
1个回答
1
投票
if (s.Length == longestStart + (maxLength + 1))

意味着您只对字符串末尾出现的最长回文感兴趣。要考虑其他位置的回文,应该是:

if (maxLength > 1)
© www.soinside.com 2019 - 2024. All rights reserved.