前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >leetcode-125-Valid Palindrome

leetcode-125-Valid Palindrome

作者头像
chenjx85
发布2019-03-21 16:28:24
2910
发布2019-03-21 16:28:24
举报

题目描述:

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

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

Example 1:

代码语言:javascript
复制
Input: "A man, a plan, a canal: Panama"
Output: true

Example 2:

代码语言:javascript
复制
Input: "race a car"
Output: false

要完成的函数:

bool isPalindrome(string s) 

说明:

1、给定一个字符串s,要求判断这个字符串是不是回文串。这道题跟普通题目不一样的地方在于,字符串中可能会有非字母和非数字,比如空格符和标点符号,我们需要过滤掉它们。

也有可能会有大小写字母,也需要大写转换为小写。

2、明白题意,我们构造代码如下:(附详解)

代码语言:javascript
复制
    bool isPalindrome(string s) 
    {
        int i=0,s1=s.size(),j=s1-1;
        while(i<j)
        {
            while(!isalnum(s[i])&&i<=j)//一直找,直到找到字母或者数字,并且不能超过j
                i++;
            if(i==j+1)//如果超过j了,到达j+1,说明从初始的i到j的中间区域都没有字母或者数字,这时候返回true。比如[,.]这样的例子。
                return true;
            while(!isalnum(s[j]))//一直找,直到找到字母或者数字。这里不加i<=j这个判断条件是因为,前面在中间区域找得到,那么这里也必定找得到
                j--;
            if(tolower(s[i])==tolower(s[j]))//要转换大小写
            {
                i++;
                j--;
            }
            else
                return false;
        }
        return true;
    }

上述代码实测10ms,beats 95.16% of cpp submissions。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018-05-29 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 题目描述:
  • 要完成的函数:
  • 说明:
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档