C# 如何重构代码以返回isAlindrome

C# 如何重构代码以返回isAlindrome,c#,C#,使用模拟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].ToS

使用模拟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"));
    }
}
此代码正在运行,但我无法使用它 小写文字:超出时间限制 各种文字:超过时限


我可以做哪些更改来重构代码以加快工作速度?

如果发现不匹配,可以立即返回。

如果发现不匹配,可以立即返回。

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

林克的魔力

bool isPalindrome = str.SequenceEqual(str.Reverse());
若要忽略大小写,请将原始字符串和反向字符串转换为小写,然后检查其顺序

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

基本上,回文检查是一种实际字符串等于其反面的检查。当我们检查原始字符串以反转字符串时,我们不需要移动到末尾。我们只需要核对第一个字母和最后一个字母,依此类推

这是非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;
    }
公共静态bool IsPalindrome(字符串字)
{
字符串testWord=word;
for(int i=0;i

POC:

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

林克的魔力

bool isPalindrome = str.SequenceEqual(str.Reverse());
若要忽略大小写,请将原始字符串和反向字符串转换为小写,然后检查其顺序

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

基本上,回文检查是一种实际字符串等于其反面的检查。当我们检查原始字符串以反转字符串时,我们不需要移动到末尾。我们只需要核对第一个字母和最后一个字母,依此类推

这是非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;
    }
公共静态bool IsPalindrome(字符串字)
{
字符串testWord=word;
for(int i=0;i

Po:

刚刚从我的头顶开始(也许不适合这里),但不妨考虑一下,测试<代码> ToLower(结果)< /C> >匹配<代码> ToLower(输入)< /代码>。例如5行代码,没有循环。如果第一个字符和最后一个字符不相等,则永远循环。。添加
否则返回false
的话,你的问题不是性能而是正确性。谢谢大家的帮助。如果你想要分数,我会选择@JNevill。加上答案,我会打勾it@John请注意,
toupper不变量
。(.)但最终,如果您同意/允许分配另一个反向字符串,那么您应该使用
string.Equals(s1,s2,StringComparison.ordinallingorecase)
将其与原始字符串进行比较,而不是将两个字符串都转换为小写或大写。就在我的头顶上(可能不适合这里)但是不妨考虑一下,测试<代码> ToLower(结果)< /C> >匹配<代码> ToLower(输入)< /C>。例如5行代码,没有循环。如果第一个字符和最后一个字符不相等,则永远循环。。添加
否则返回false
的话,你的问题不是性能而是正确性。谢谢大家的帮助。如果你想要分数,我会选择@JNevill。加上答案,我会打勾it@John请注意,
toupper不变量
。(.)但最终,如果您同意/允许分配另一个反向字符串,则应使用
string.Equals(s1、s2、StringComparison.OrdinalIgnoreCase)将其与原始字符串进行比较
而不是将两个字符串都转换为小写或大写。感谢回复,但它不允许在此模拟中使用linq感谢回复,但它不允许在此模拟中使用linq