【LeetCode】125. Valid Palindrome

问题描写

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.

回文字符串判断,但只判断字母和数字是不是构成回文字符串,标点符号被略过。

问题分析

保存左右两个指针,每轮先移动左指针获得1个字母或数字,其它字符都跳过;然后移动右指针,找到1个字母或数字,其它字符都跳过;如果此时左右两个字符都为字母或数字并但是两个不相等,则返回false;进行下轮指针移动直到两个指针相等。

代码

class Solution {
public:
    bool isPalindrome(string s) {
        if(s.length()==0||s.length()==1) return true;
        int left=0, right=s.length()-1;
        // 大写转小写
        for(int i=0;i<s.length();i++) {
            char ch = s[i];
            if(ch>='A'&&ch<='Z') ch = 'a' + ch - 'A';
            s[i] = ch;
        }
        while(left<right) {
            char l = s[left++];
            char r = s[right--];
            while(!((l>='a'&&l<='z')||(l>='0'&&l<='9'))&&left<s.length()) {
                l = s[left++];
            }
            while(!((r>='a'&&r<='z')||(r>='0'&&r<='9'))&&right>0) {
                r = s[right--];
            }
            if(((l>='a'&&l<='z')||(l>='0'&&l<='9'))&&((r>='a'&&r<='z')||(r>='0'&&r<='9'))&&r!=l) {
                return false;
            }
        }
        return true;
    }
};
波比源码 – 精品源码模版分享 | www.bobi11.com
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需!
7. 如遇到加密压缩包,请使用WINRAR解压,如遇到无法解压的请联系管理员!

波比源码 » 【LeetCode】125. Valid Palindrome

发表评论

Hi, 如果你对这款模板有疑问,可以跟我联系哦!

联系站长
赞助VIP 享更多特权,建议使用 QQ 登录
喜欢我嘛?喜欢就按“ctrl+D”收藏我吧!♡