我需要创建一个IsPalindrome函数,它将确定所提供的字符串是否是回文。在评估字符串是否为回文时,将考虑字母数字字符。如此说来,我在尝试扰乱空间和上限时遇到麻烦。这是我现在的功能。如果这有所作为:在完成此功能之后,我将必须解析JSON文件,并将“字符串”数组中的每个元素放入IsPalindrome函数中。有提示吗?
private static bool IsPalindrome(string value)
{
var min = 0;
var max = value.Length - 1;
while (true)
{
if (min > max)
return true;
var a = value[min];
var b = value[max];
if (if (char.ToLower(a) == char.ToLower(b))
{
return true;
}
else {
return false;
}
min++;
max--;
}
我这样做的方法是将字符串转换为字符数组,跳过非字母字符,并使所有字符都变为小写。然后,我将使用索引来检查数组的前一半是否等于最后一半。像这样的东西:
public static bool IsPalindrome(string value)
{
char[] forwards = (from c in value.ToLower().ToCharArray() where char.IsLetter(c) select c).ToArray();
int middle = (forwards.Length / 2) + 1;
for (int i = 0; i < middle; i++)
if (forwards[i] != forwards[forwards.Length - 1 - i])
return false;
return true;
}
第一行使用LINQ制作数组,因此您需要using System.Linq;
您可以忽略空格,句号和逗号:
private static bool IsPalindrome(string value){
value = value.ToLower();
int i = 0, j = value.Length - 1;
while(i < j) {
while(i < j && (value[i] == ' ' || value[i] == '.' || value[i] == ',')) i++;
while(i < j && (value[j] == ' ' || value[j] == '.' || value[j] == ',')) j--;
if(value[i++] != value[j--]) return false;
}
return true;
}