[路飞]_leetcode-剑指 Offer II 018-有效的回文

简介: leetcode-剑指 Offer II 018-有效的回文

网络异常,图片无法展示
|


「这是我参与11月更文挑战的第1天,活动详情查看:2021最后一次更文挑战


[题目地址][B站地址]


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


本题中,将空字符串定义为有效的 回文串


示例 1:


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


示例 2:


输入: s = "race a car"
输出: false
解释:"raceacar" 不是回文串
复制代码


提示:


  • 1 <= s.length <= 2 * 105
  • 字符串 s 由 ASCII 字符组成


解题思路如下:


  1. 特殊判断当字符串长度为 1 的时候,肯定是一个回文串,直接返回 true 即可
  2. 定义两个指针,l 初始化指向字符串 s 第一位,r 初始化指向字符串 s 最后一位
  3. 对比两个指针指向字符是否相同,如果不同,则说明输入字符串不是有效的回文串,返回 false
  4. 否则让 l 向后走一步,r 向前走一步,再次比较,直到两指针相遇(因为本题只考虑字母和数字字符,所以当遇到非字母数字的字符,直接跳过)
  5. 如果直到两指针相遇都没有两指针指向字符不同的情况,则输入字符串是有效的回文串


代码如下:


var isPalindrome = function(s) {
    // 特判
    if(s.length===1) return true;
    const reg = /[a-zA-Z0-9]/
    // 校验输入字符串是否是回文串
    function check(l,r){
        while(l<r){
            while(!reg.test(s[l]) && l<r) l++
            while(!reg.test(s[r]) && l<r) r--
            if(s[l].toLocaleLowerCase() !== s[r].toLocaleLowerCase()) return false;
            else l++,r--;
        }
        return true;
    }
    // 返回校验结果
    return check(0,s.length-1)
};
复制代码


至此,我们就完成了leetcode-剑指 Offer II 018-有效的回文


如有任何问题或建议,欢迎留言讨论!

相关文章
|
4月前
|
Go
golang力扣leetcode 479.最大回文数乘积
golang力扣leetcode 479.最大回文数乘积
21 0
LeetCode | 234. 回文链表
LeetCode | 234. 回文链表
|
26天前
|
算法 定位技术
【leetcode】剑指 Offer II 105. 岛屿的最大面积-【深度优先DFS】
【leetcode】剑指 Offer II 105. 岛屿的最大面积-【深度优先DFS】
17 0
|
27天前
【力扣】409.最长回文串
【力扣】409.最长回文串
|
4月前
|
Go
golang力扣leetcode 剑指Offer II 114. 外星文字典
golang力扣leetcode 剑指Offer II 114. 外星文字典
21 0
|
4月前
|
Go
golang力扣leetcode 1332. 删除回文子序列
golang力扣leetcode 1332. 删除回文子序列
13 0
|
4月前
|
Go
golang力扣leetcode 234.回文链表
golang力扣leetcode 234.回文链表
11 0
|
4月前
|
机器学习/深度学习
leetcode-234:回文链表
leetcode-234:回文链表
18 0
|
5月前
「LeetCode」剑指 Offer 40. 最小的k个数
「LeetCode」剑指 Offer 40. 最小的k个数
29 0
|
5月前
|
算法 vr&ar 图形学
☆打卡算法☆LeetCode 214. 最短回文串 算法解析
☆打卡算法☆LeetCode 214. 最短回文串 算法解析