C#回文测试

问题描述 投票:-1回答:2

我需要创建一个IsPalindrome函数,它将确定所提供的字符串是否是回文。在评估字符串是否为回文时,将考虑字母数字字符。如此说来,我在尝试扰乱空间和上限时遇到麻烦。这是我现在的功能。如果这有所作为:在完成此功能之后,我将必须解析JSON文件,并将“字符串”数组中的每个元素放入IsPalindrome函数中。有提示吗?

 private static bool IsPalindrome(string value)
    {
        var min = 0;
        var max = value.Length - 1;

        while (true)
        {
            if (min > max)
                return true;
            var a = value[min];
            var b = value[max];

            if (if (char.ToLower(a) == char.ToLower(b))
             {
              return true;
             }
              else {
                 return false;
              }

            min++;
            max--;
        }
c# function palindrome
2个回答
1
投票

我这样做的方法是将字符串转换为字符数组,跳过非字母字符,并使所有字符都变为小写。然后,我将使用索引来检查数组的前一半是否等于最后一半。像这样的东西:

public static bool IsPalindrome(string value)
{
    char[] forwards = (from c in value.ToLower().ToCharArray() where char.IsLetter(c) select c).ToArray();
    int middle = (forwards.Length / 2) + 1;
    for (int i = 0; i < middle; i++)
        if (forwards[i] != forwards[forwards.Length - 1 - i])
            return false;
    return true;
}

第一行使用LINQ制作数组,因此您需要using System.Linq;


-1
投票

您可以忽略空格,句号和逗号:

private static bool IsPalindrome(string value){
    value = value.ToLower();
    int i = 0, j = value.Length - 1;
    while(i < j) {
        while(i < j && (value[i] == ' ' || value[i] == '.' || value[i] == ',')) i++;
        while(i < j && (value[j] == ' ' || value[j] == '.' || value[j] == ',')) j--;
        if(value[i++] != value[j--]) return false;
    }
    return true;
}

Testing

© www.soinside.com 2019 - 2024. All rights reserved.