zoukankan      html  css  js  c++  java
  • LeetCode Valid Palindrome

    class Solution {
    public:
        bool isPalindrome(string s) {
            int len = s.length();
            //if (len < 1) return true;
            int p = -1, q = len;
            while (true) {
                char a, b;
                while (++p < len && !(a = check2lower(s[p])) );
                while (--q > -1 && !(b = check2lower(s[q])) );
                if (p >= q) return true;
                if (a != b) {
                    return false;
                }
            }
            return true;
        }
        
        char check2lower(char ch) {
            if (ch <= '9' && ch >= '0') return ch;
            if (ch <= 'z' && ch >= 'a') return ch;
            if (ch <= 'Z' && ch >= 'A') return ch + 'a' - 'A';
            return '';
        }
    };

    跟快排的结构有点类似

    第二轮:

    class Solution {
    public:
        bool isChar(char ch) {
            return ch >= 'A' && ch <= 'Z' || ch >= 'a' && ch <= 'z' || ch >= '0' && ch <= '9';
        }
        
        bool cmpChar(char a, char b) {
            if (a >= 'a') {
                a-=32;
            }
            if (b >= 'a') {
                b-=32;
            }
            return a == b;
        }
    
        bool isPalindrome(string s) {
            int len = s.size();
            int p = 0;
            int q = len-1;
            while (p<q) {
                while(!isChar(s[p]) && p < q) p++;
                while(!isChar(s[q]) && p < q) q--;
                if (p >= q) break;
                if (cmpChar(s[p], s[q])) {
                    p++, q--;
                } else {
                    return false;
                }
            }
            return true;
        }
    };
    

      

    第三轮:

    class Solution {
    public:
        bool isPalindrome(string s) {
            int len = s.size();
            int p = 0;
            int q = len - 1;
            while (p < q) {
                while (p < len && !isAlphanumeric(s[p])) {
                    p++;
                }
                while (q > 0 && !isAlphanumeric(s[q])) {
                    q--;
                }
                if (p >= q) {
                    return true;
                }
                if (toLowerCase(s[p]) != toLowerCase(s[q])) {
                    return false;
                }
                p++, q--;
            }
            return true;
        }
        char toLowerCase(char ch) {
            if (ch >= 'a') {
                ch-= 'a' - 'A';
            }
            return ch;
        }
        bool isAlphanumeric(char ch) {
            if (ch >= 'a' && ch <= 'z' 
                || ch >= 'A' && ch <= 'Z'
                || ch >= '0' && ch <= '9') {
                return true;
            }
            return false;
        }
    };
  • 相关阅读:
    Maven 安装配置
    docker 安装 MySQL
    查看CentOS版本方法
    JavaScript定时器的开启关闭
    JavaScript实现延时提示框
    JavaScript获取当前时间
    JavaScript实现数字时钟功能
    JavaScript获取非行间样式
    JavaScript数组的操作
    JavaScript数组和json的区别
  • 原文地址:https://www.cnblogs.com/lailailai/p/3813791.html
Copyright © 2011-2022 走看看