zoukankan      html  css  js  c++  java
  • LeetCode: Valid Palindrome [125]

    【题目】

    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;
        }
    };


  • 相关阅读:
    cogs 908 校园网
    植保___农药基础知识
    底层终端-.c文件之间的调用
    指针复习
    电子工程世界
    电机与维修
    航拍部分
    系统集成与维修
    关于大型架构数据库和web一步一步优化草案
    服务器安装git,如何以秘钥方式提交
  • 原文地址:https://www.cnblogs.com/yxwkf/p/4552310.html
Copyright © 2011-2022 走看看