[LeetCode 验证回文串] | 刷题打卡

215 阅读1分钟

一、题目描述:

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

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

示例 1:

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

示例 2:

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

二、思路分析:

1.验证有效字符并以小写或者大写形式存储起来

2.利用双指针将首位元素进行对比,全部对应位置上相同判断为回文字符串

三、AC 代码:

javascript

/**
 * @param {string} s
 * @return {boolean}
 */
var isPalindrome = function (s) {
    let isValidElem = (s) => {
        let str = 'qwertyuioplkjhgfdsazxcvbnm1234567890QWERTYUIOPLKJHGFDSAZXCVBNM' //有效的字符
        return str.indexOf(s) > -1 //判断是否为有效字符
    }
    let stack = [] //存储有效字符串
    for (let i = 0; i < s.length; i++) {
        if (isValidElem(s[i])) {
            stack.push(s[i].toLocaleLowerCase()) //小写字母存储有效字符串
        }
    }
    let left = 0, right = stack.length - 1; //双指针
    while (left < right) {
        if (stack[left] !== stack[right]) return false
        left++ //左指针
        right-- //右指针
    }
    return true
};

python

class Solution(object):
    def isPalindrome(self, s):
        """
        :type s: str
        :rtype: bool
        """
        def isValidElem(self, s1): ##判断是否为有效字符串
            return '0' <= s1 <= '9' or 'a' <= s1 <= 'z' or 'A' <= s1 <= 'Z'

        stack = [] ## 存储有效字符串
        for i in range(len(s)):
            if isValidElem(self,s[i]):
                stack.append(s[i].lower()) ## 小写提出有效字符串

        left, right = 0, len(stack)-1 ## 双指针遍历
        while left < right:
            if stack[left] != stack[right]: ## 判断首尾是否相同
                return False
            left +=1
            right-=1
        return True

本文正在参与「掘金 2021 春招闯关活动」, 点击查看 查看详情