LeetCode: Valid Palindrome [125]

LeetCode: Valid Palindrome [125]

大家好,又见面了,我是全栈君,今天给大家准备了Idea注册码。

全栈程序员社区此处内容已经被作者隐藏,请输入验证码查看内容
验证码:
请关注本站微信公众号,回复“验证码”,获取验证码。在微信里搜索“全栈程序员社区”或者“www_javaforall_cn”或者微信扫描右侧二维码都可以关注本站微信公众号。

【题目】

Given a string, determine if it is a palindrome, considering only alphanumeric characters and ignoring cases.

For example,
"A man, a plan, a canal: Panama" is a palindrome.
"race a car" is not a palindrome.

Note:
Have you consider that the string might be empty? This is a good question to ask during an interview.

For the purpose of this problem, we define empty string as valid palindrome.

【题意】

    给定一个字符串,仅仅关注英文字母和数字,忽略其它字符。问英文字母和数字按序排列后是否构成是回文


【思路】

    利用回文串推断的老办法就可以,两个指针p1, p2分别从头和尾中间扫描,推断对称位置的字符是否同样,仅仅只是须要跳过除英文字母和数字之外的其它字符。
    另外还须要注意处理2中特殊情况:(1)字符串为空串,(2)字符串不是空串,但里面没有英文字母或者数字。 这两种情况都判定为true
    

【代码】

class Solution {
public:
    bool isAlphanumeric(char c){
        if(isdigit(c))return true;
        if(c>='A'&&c<='Z'||c>='a'&&c<='z')return true;
        return false;
    }
    
    bool isEqual(char c, char b){
        if(isdigit(c))return c==b;
        if(c>='A'&&c<='Z')c='a'+(c-'A');
        if(b>='A'&&b<='Z')b='a'+(b-'A');
        return c==b;
    }

    bool isPalindrome(string s) {
        int len=s.length();
        if(len==0)return true;
        
        int front=0;
        int back=len-1;
        while(front<back){
            while(front<=back && !isAlphanumeric(s[front]))front++;
            while(front<=back && !isAlphanumeric(s[back]))back--;
            if(front<=back){
                if(!isEqual(s[front], s[back]))return false;
                front++;
                back--;
            }
        }
        return true;
    }
};

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/117906.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 50分钟学会Laravel 50个小技巧(基于laravel5.2,仅供参考)

    50分钟学会Laravel 50个小技巧(基于laravel5.2,仅供参考)

    2021年11月8日
    43
  • Sql分页查询方式

    Sql分页查询方式Sql的三种分页查询方式先说好吧,查询的数据排序,有两个地方(1、分页前的排序。2、查询到当前页数据后的排序)第一种1、先查询当前页码之前的所有数据idselecttop((当前页数-1)*每页数据条数)idfrom表名2、再查询所有数据的前几条,但是id不在之前查出来的数据中selecttop每页数据条数*from表名whereidnotin( selecttop((当前页数-1)*每页数据条数)idfrom表名 )3、查询出当前页面的所有数据后,再

    2022年6月26日
    68
  • 剑指Offer面试题:4.从尾到头打印链表建议收藏

    一题目:从尾到头打印链表代码实现采用两种方法实现:(1)不修改原列表,使用stack的方式实现(2)修改原列表,对元列表逆序两种方法都在下面的代码中:

    2021年12月19日
    36
  • linux chown命令 例子,Linux系统之Chown命令用法介绍

    linux chown命令 例子,Linux系统之Chown命令用法介绍当我们要改变一个文件的属组 我们所使用的用户必须是该文件的属主而且同时是目标属组成员 或超级用户 这种情况的话 只有超级用户的才能改变文件的属主 在 Linux 操作系统的美国服务器当中 Chown 命令是 Linux 美国服务器系统最常用到的命令之一 它是用于改变文件或目录的访问权限 今天小编就简单介绍下 Chown 命令的用法 希望对大家有所帮助 chown 语法 chown 选项 所有者

    2025年11月4日
    1
  • vue入门教程(一)「建议收藏」

    vue入门教程(一)「建议收藏」1.vue简介1.1vue是什么官网:https://cn.vuejs.org/Vue是一套用于构建用户界面的渐进式框架。与其它大型框架不同的是,Vue被设计为可以自底向上逐层应用。Vue的核心库只关注视图层,不仅易于上手,还便于与第三方库或既有项目整合。另一方面,当与现代化的工具链以及各种支持类库结合使用时,Vue也完全能够为复杂的单页应用提供驱动。1.2vue的特点1)遵循MVVM模式2)编码简洁,体积小,运行效率高,适合移动/PC端开发.

    2022年6月4日
    33
  • spring cloud和dubbo的区别

    spring cloud和dubbo的区别最近一段时间不论互联网还是传统行业,凡是涉及信息技术范畴的圈子几乎都在讨论 微服务架构 。近期也看到各大技术社区开始组织一些沙龙和论坛来分享spring Cloud的相关实施经验,这对于最近正在整理SpringCloud相关套件内容与实例应用的我而言,还是有不少激励的。目前,SpringCloud在国内的知名度并不高,在前阵子的求职过程中,与一些互联网公司的架构师、技术VP或者CT

    2022年4月29日
    43

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号