这段代码有什么区别

时间:2021-02-07 11:32:15

标签: c# string palindrome

我想检查一个回文字符串,你认为哪个更好?

我创建了一个 bool 函数来检查回文,然后在 Main 中我们实现了用户输入以及 if 语句,该语句检查 bool1 是真还是假,确定输出,分别是字符串是否为回文。

public static bool Palindrome(string text)

{
   if (text.Length <= 1)
      return true;
   else
   {
      if ( text[0] != text[ text.Length - 1 ] )
           return false;
      else
           return Palindrome( text.Substring( 1, text.Length-2 ) );
   }   
   }   
public static void Main()

{

   string userInput;
   bool bool1;
        
   Console.Write(" Input a string : ");
   userInput = Console.ReadLine();
   bool1 = Palindrome(userInput);
   if (bool1 ==true)
   {
      Console.WriteLine(" The string is Palindrome.");
   }
   else
   {
      Console.WriteLine(" The string is not a Palindrome.");
   }
}

或者这个

static void Main(string[] args)

{
    Console.WriteLine("Please input a string");
    string userString = Console.ReadLine();
    string userOutput = Reversed(userString);
    bool res = CheckPalindrome(userString, userOutput);

    Console.ReadKey();
    }

 static string Reversed(string userString)

 {
    char[] reveresed = userString.ToCharArray();
    Array.Reverse(reveresed);
    string userOutput = new string(reveresed);
    return userOutput;
 }

    static bool CheckPalindrome(string userOutput, string userString)
    {
        bool bool1 = userString.Equals(userOutput, StringComparison.OrdinalIgnoreCase);
        if (bool1 == true)
        {
            Console.WriteLine("The string " + userOutput + " is a Palindrome!");
        }
        else
        {
            Console.WriteLine("The string " + userOutput + " is not a Palindrome!");
        }
        return bool1;
    }

1 个答案:

答案 0 :(得分:1)

正如@TimSchmelter 所说,第二个版本速度更快,可读性更强。

然而,有一个比这两个版本更快但更复杂的版本。

遍历字符串的前半部分,并将其与后半部分进行比较。奇数长度的中间字符将被忽略。

bool IsPalindrome(string myString)
{
    if (string.IsNullOrEmpty(myString))
        return false;
    for (var i = 0; i < myString.Length / 2; i++)
    {
        if(myString[i] != myString[myString.Length - i - 1])
            return false;
    }
    return true;
}