如何解决这段代码有什么区别
我想检查一个回文字符串,你认为哪个更好?
我创建了一个 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;
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。