125.验证回文串

给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。

说明:本题中,我们将空字符串定义为有效的回文串。

示例 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 的未更改值。

再次感谢作者,给了学习的机会。

你可能感兴趣的:(算法)