查找3位数Palindrom时遇到问题

时间:2019-01-07 23:49:21

标签: c# algorithm math

我不知道如何使此palindrom代码正常工作。

问题可能是字符串分割错误? 感谢您的帮助!

CustomToolbarWrapper

此代码的输出为(不是完整的输出):

发现Palindrom:11110

Palindrom找到:22220

Palindrom找到:33330

发现Palindrom:44440

1 个答案:

答案 0 :(得分:0)

使用Linq

public static bool IsPalindrome(string str)
{
    return String.Compare(str, new string(Enumerable.Range(1, str.Length).Select(i => str[str.Length - i ]).ToArray())) == 0;
}

没有Linq

public static bool IsPalindrome2(string str)
{
    var isPalindrome = true;
    for (int i=0; i<str.Length ; i++)
    {
        if ( str[i] != str[str.Length -i -1])
        {
            isPalindrome = false;
            break;
        }
    }

    return isPalindrome;
}

编辑在您的情况下,您要将字符串长度分成一半。假设您有5位数回文。您将回文的长度除以2 = 2等于5,之后得到它的子字符串

len = str.Length  / 2 // 5/2 = 2 
part1 = str.substr(0,2);
part2 = str.substr(2,2); // this part is wrong for 5 digit number

4位数字

len = str.Length  / 2 // 4/2 = 2 
part1 = str.substr(0,2);
part2 = str.substr(2,2); // now it is giving correct result.

检查以下代码以获取解决方案

static bool IsPalindrom(int numb)
{
    var productString = Convert.ToString(numb);
    var sub1 = productString.Substring(0, productString.Length / 2);
    var sub2 = new string(productString.Substring(productString.Length / 2 + (productString.Length % 2 == 1 ? 1 : 0), productString.Length / 2).Reverse().ToArray());
    Console.WriteLine(sub1);
    Console.WriteLine(sub2);

    return sub1.Equals(sub2);
}