[路飞]_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-有效的回文


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

相关文章
|
3月前
|
Python
【Leetcode刷题Python】剑指 Offer 32 - III. 从上到下打印二叉树 III
本文介绍了两种Python实现方法,用于按照之字形顺序打印二叉树的层次遍历结果,实现了在奇数层正序、偶数层反序打印节点的功能。
57 6
|
3月前
|
Python
【Leetcode刷题Python】剑指 Offer 26. 树的子结构
这篇文章提供了解决LeetCode上"剑指Offer 26. 树的子结构"问题的Python代码实现和解析,判断一棵树B是否是另一棵树A的子结构。
51 4
|
3月前
|
Python
【Leetcode刷题Python】剑指 Offer 30. 包含min函数的栈
本文提供了实现一个包含min函数的栈的Python代码,确保min、push和pop操作的时间复杂度为O(1)。
28 4
|
3月前
|
Python
【Leetcode刷题Python】剑指 Offer 22. 链表中倒数第k个节点
Leetcode题目"剑指 Offer 22. 链表中倒数第k个节点"的Python解决方案,使用双指针法找到并返回链表中倒数第k个节点。
54 5
|
3月前
|
算法 Python
【Leetcode刷题Python】剑指 Offer 33. 二叉搜索树的后序遍历序列
本文提供了一种Python算法,用以判断给定整数数组是否为某二叉搜索树的后序遍历结果,通过识别根节点并递归验证左右子树的值是否满足二叉搜索树的性质。
23 3
|
3月前
|
Python
【Leetcode刷题Python】剑指 Offer 32 - II. 从上到下打印二叉树 II
本文提供了一种Python实现方法,用于层次遍历二叉树并按层打印结果,每层节点按从左到右的顺序排列,每层打印到一行。
39 3
|
3月前
|
Python
【Leetcode刷题Python】剑指 Offer 21. 调整数组顺序使奇数位于偶数前面
Leetcode题目"剑指 Offer 21. 调整数组顺序使奇数位于偶数前面"的两种Python解决方案,一种是使用双端队列调整数组顺序,另一种是使用双指针法将奇数移到数组前半部分,偶数移到后半部分。
28 4
|
3月前
|
Python
【Leetcode刷题Python】剑指 Offer 18. 删除链表的节点
Leetcode题目"剑指 Offer 18. 删除链表的节点"的Python解决方案,通过使用双指针法找到并删除链表中值为特定数值的节点,然后返回更新后的链表头节点。
41 4
|
3月前
|
算法 JavaScript Python
【Leetcode刷题Python】79. 单词搜索和剑指 Offer 12. 矩阵中的路径
Leetcode第79题"单词搜索"的Python解决方案,使用回溯算法在给定的二维字符网格中搜索单词,判断单词是否存在于网格中。
42 4
|
3月前
|
Python
【Leetcode刷题Python】剑指 Offer 32 - I. 从上到下打印二叉树
本文介绍了使用Python实现从上到下打印二叉树的解决方案,采用层次遍历的方法,利用队列进行节点的访问。
34 2