在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"));
}
}
此代码有效,但失败了 小写字母:超出时间限制 各种字眼:超过时间限制。
我可以进行哪些更改以重构代码以使其更快地工作?
答案 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)
您可以做的一件事是,如果发现不匹配项,则会立即返回。