给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。
说明:本题中,我们将空字符串定义为有效的回文串。
示例 1:
输入: "A man, a plan, a canal: Panama"
输出: true
示例 2:
输入: "race a car"
输出: false
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/valid-palindrome
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
public bool IsPalindrome(string s)
{
if (s == null)
{
return false;
}
int left = 0;
int right = s.Length - 1;
while (left <= right)
{
var leftElement = s[left];
var rightElement = s[right];
//case1: 左右指针指向的都是字母或字符串
if (char.IsLetterOrDigit(leftElement) && char.IsLetterOrDigit(rightElement))
{
if (char.ToLower(leftElement) != char.ToLower(rightElement))
{
return false;
}
left++;
right--;
}
//case2: 左指针指向的是字母或字符串
else if (char.IsLetterOrDigit(leftElement))
{
right--;
}
//case3: 右指针指向的是字母或字符串
else
{
left++;
}
}
return true;
}
作者:yicheng2020
链接:https://leetcode-cn.com/problems/valid-palindrome/solution/yan-zheng-hui-wen-chuan-by-yicheng2020/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
运用了双指针,从字符串两头往中间遍历并比较。是比较易懂的一种方法。
char.IsLetterOrDigit();
// 摘要:
// 指示指定的 Unicode 字符是否属于字母或十进制数字类别。
//
// 参数:
// c:
// 要计算的 Unicode 字符。
//
// 返回结果:
// 如果 true 是字母或十进制数,则为 c;否则为 false。
char.ToLower();
// 摘要:
// 将 Unicode 字符的值转换为它的小写等效项。
//
// 参数:
// c:
// 要转换的 Unicode 字符。
//
// 返回结果:
// c 的小写等效项,或者,如果 c 已经是小写字母或不是字母,则为 c 的未更改值。
再次感谢作者,给了学习的机会。