如何重构代码以返回IsPalindrome

时间:2019-04-08 17:08:19

标签: c#

https://www.testdome.com/t上使用模拟C#问题

我已经编码

using System;

public class Palindrome
{
   public static bool IsPalindrome(string word)
        {
            string testWord = word;

            string first = word[0].ToString();
            string last = word[word.Length - 1].ToString();

            bool isPal = false;

            while (testWord.Length > 1)
            {
                Console.WriteLine(testWord);

                if (first.ToLower() == last.ToLower())
                {
                    testWord = testWord.Remove(0,1);
                    testWord = testWord.Remove(testWord.Length - 1);

                    isPal = true;
                }

            }

            return isPal;
        }

    public static void Main(string[] args)
    {
        Console.WriteLine(Palindrome.IsPalindrome("Deleveled"));
    }
}

此代码有效,但失败了 小写字母:超出时间限制 各种字眼:超过时间限制。

我可以进行哪些更改以重构代码以使其更快地工作?

2 个答案:

答案 0 :(得分:2)

无需编写多行代码,您可以在一行中检查回文,

Linq的魔术师

bool isPalindrome = str.SequenceEqual(str.Reverse());

如果要忽略大小写,请将原始字符串和反向字符串转换为小写,然后检查其顺序

    string str = "Madam";
    var strReverse = str.ToLower().Reverse();
    var isPalindrome = str.ToLower().SequenceEqual(strReverse);

基本上,回文校验是指实际字符串等于其反向字符串的校验。当我们检查原始字符串到反向字符串的时间时,我们需要 not 直到结束。我们只需要检查第一个字母是否为最后一个,依此类推...

这是非Linq回文检查,

   public static bool IsPalindrome(string word)
    {
        string testWord = word;
        for(int i = 0; i < word.Length/2; i++)
        {
            if(char.ToLower(testWord[i]) != char.ToLower(testWord[testWord.Length - i - 1]))
               return false;
        }
        return true;
    }

POC:. net fiddle

答案 1 :(得分:0)

您可以做的一件事是,如果发现不匹配项,则会立即返回。