【发布时间】:2019-04-09 01:40:01
【问题描述】:
在 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"));
}
}
此代码正在运行,但它让我失望了 小写单词:超过时间限制 各种词:超过时间限制。
我可以进行哪些更改来重构代码以更快地工作?
【问题讨论】:
-
就在我的脑海中(可能不适合这里),但也许只考虑reversing the string 并测试
ToLower(result)是否与ToLower(input)匹配。就像 5 行代码,没有循环。 -
如果第一个和最后一个字符不相等,您将永远循环。在
if上添加else return false;。 -
您的问题不是性能而是正确性。
-
感谢大家的帮助。如果你想要积分,我和@JNevill 一起去了。添加答案,我会打勾
-
@John 请注意
ToUpperInvariantshould be better。 (Or not。)但最终,如果您同意/允许分配另一个反向字符串,那么您应该将其与原始字符串与String.Equals (s1, s2, StringComparison.OrdinalIgnoreCase)进行比较,而不是将两个字符串都转换为小写或大写。
标签: c#