每日一题 力扣 125 题

66 阅读1分钟

验证回文串

如果在将所有大写字符转换为小写字符、并移除所有非字母数字字符之后,短语正着读和反着读都一样。则可以认为该短语是一个 回文串 。

字母和数字都属于字母数字字符。

给你一个字符串 s,如果它是 回文串 ,返回 true ;否则,返回 false 。

示例 1:

输入: s = "A man, a plan, a canal: Panama" 输出:true 解释:"amanaplanacanalpanama" 是回文串。

思路:

利用双指针去解决, 创建两个左右指针, 通过左右指针同时向中间移动判断 对应元素是否相等
    var isPalindrome = function(s) {
        s = s.toLowerCase(); // 将字母全部转换为小写
        let slength = s.length
        let left = 0, right = slength - 1; // 左指针指向字符串头 , 右指针指向字符串的尾部
        while (left <= right) {
            let reg = /[a-zA-Z0-9]$/ // 判断当前元素是否为字母或数字
            let leftStr, rightStr
            if (reg.test(s[right])) { // 如果是字母 当前元素赋值给 rightStr
                rightStr = s[right] 
            } else {
                right --             // 如果是非法字符 继续移动指针, continue 跳出循环
                continue
            }
            if (reg.test(s[left])) {
                leftStr = s[left]
            } else {
                left ++
                continue
            }
            if (leftStr === rightStr) { // 如果两个元素相同 继续移动指针
                left ++
                right --
            } else {
                return false
            }
        }
        return true
    };

文章自己当做一个笔记, 也希望得到大佬们的指点