美文网首页ADean的算法学习
[LeetCode]验证回文字符串

[LeetCode]验证回文字符串

作者: 呆萌院长 | 来源:发表于2018-06-21 15:43 被阅读0次

    题目:

    给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。
    说明:
    本题中,我们将空字符串定义为有效的回文串。
    示例 1:

    输入: "A man, a plan, a canal: Panama"
    输出: true
    

    示例 2:

    输入: "race a car"
    输出: false
    

    分析:

    • 1,只需要建立两个指针,left和right, 分别从字符的开头和结尾处开始遍历整个字符串,如果遇到非字母数字的字符就跳过,继续往下找,直到找到下一个字母数字或者结束遍历,如果遇到大写字母,就将其转为小写。等左右指针都找到字母数字时,比较这两个字符,若相等,则继续比较下面两个分别找到的字母数字,若不相等,直接返回false。

    时间复杂度为O(n)

    class Solution {
    public:
        bool isPalindrome(string s) {
            int left = 0, right = s.size() - 1 ;
            while (left < right) {
                if (!isAlphaNum(s[left])) ++left;
                else if (!isAlphaNum(s[right])) --right;
                else if ((s[left] + 32 - 'a') %32 != (s[right] + 32 - 'a') % 32) return false;
                else {
                    ++left; --right;
                }
            }
            return true;
        }
        bool isAlphaNum(char &ch) {
            if (ch >= 'a' && ch <= 'z') return true;
            if (ch >= 'A' && ch <= 'Z') return true;
            if (ch >= '0' && ch <= '9') return true;
            return false;
        }
    };
    

    上面代码在LeetCode上的运行时间为8 ms。

    相关文章

      网友评论

        本文标题:[LeetCode]验证回文字符串

        本文链接:https://www.haomeiwen.com/subject/xdntyftx.html