csdn初级算法之————验证回文串

问题描述:

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

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

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


链接:https://leetcode.cn/leetbook/read/top-interview-questions-easy/xne8id/
来源:力扣(LeetCode)
 

解法一:js-api

  思路:使用api得到只含数字字母的字符串,将其翻转,二者比较。但需要注意的是,数组的深浅拷贝问题。

var isPalindrome = function(s) {

    //获取统一小写后的字符串数组

    let arr = Array.from(s.toLowerCase())

    let asciiVal

    //筛选出只含字母数字的数组

    let newArr = arr.filter((item)  => {

        asciiVal = item.charCodeAt()

        return asciiVal >= 48 && asciiVal <= 57 || asciiVal >= 97 && asciiVal <= 122

    })

    arr = newArr.slice() //★数组浅拷贝★

    //数组翻转

    newArr.reverse()

    //数组转化为字符串并比较

    return arr.join('') === newArr.join('')

}

解法二:双指针

 思路:一个指针从前往后,另一个从后往前,遇到非数字字母就跳过,判断两个指针所指向的元素值是否相等

var isPalindrome = function(s) {

    let arr = s.toLowerCase()

    let p = 0, q = s.length - 1

    let test = /[a-z0-9]/ //字母数字字符正则式

    while(p < q){

        //先去除非数字字母字符

        while(p < q && !test.test(arr[p])) p++

        while(p < q && !test.test(arr[q])) q--

        //判断是否对称

        if(arr[p] != arr[q]) return false

        p++

        q--

    }

    return true

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值