这段代码有什么区别
What's the difference between this code's
我正在尝试检查回文字符串,您觉得哪个更好?
我创建了一个 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;
}
正如@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;
}
我正在尝试检查回文字符串,您觉得哪个更好?
我创建了一个 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;
}
正如@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;
}