zoukankan      html  css  js  c++  java
  • [leetcode]Valid Palindrome

    相对简单,就是从两边往中间推进,忽略其他字符。

    public class Solution {
        public boolean isPalindrome(String s) {
            if (s.length() == 0) return true;
            int i = 0;
            int j = s.length() - 1;
            while (true)
            {
                while (i < s.length() && !isAlphaNum(s.charAt(i)))
                {
                    i++;
                }
                while (j >= 0 && !isAlphaNum(s.charAt(j)))
                {
                    j--;
                }
                if (i > j || i == s.length() || j < 0) break;
                int c1 = s.charAt(i);
                int c2 = s.charAt(j);
                if (c1 == c2 || c1-c2 == 'a'-'A' || c1-c2 == 'A' - 'a') {
                    i++;
                    j--;
                }
                else return false;
            }
            return true;
        }
        
        private boolean isAlphaNum(char c)
        {
            if ((c >= 'a' && c <= 'z') ||
                (c >= 'A' && c <= 'Z') ||
                (c >= '0' && c <= '9')) return true;
            else return false;
        }
    }
    

    这个参考答案写的很简洁,当然它修改了原来的字符串,不过这不是关键,也可以不改,关键是循环里的if-else写法:

    bool isAlphanumeric(char &c) {
        if(c >= 'A' && c <= 'Z') c += 32;
        else if(c >= '0' && c <= '9' || c >= 'a' && c <= 'z') return true;
        else return false;
        return true;
    }
    
    bool isPalindrome(string s) {
        int i = 0, j = s.length()-1;
        while(i < j) {
            if(!isAlphanumeric(s[i])) ++i;
            else if(!isAlphanumeric(s[j])) --j;
            else if(s[i++] != s[j--]) return false;
        }
    
        return true;
    }
    

     python3

    class Solution:
        def isPalindrome(self, s: str) -> bool:
            if len(s) == 0 or len(s) == 1:
                return True
            i = 0
            j = len(s) - 1
            validChar = 'abcdefghijklmnopqrstuvwxyz0123456789'
            while True:
                while i < len(s) and s[i].lower() not in validChar:
                    i += 1
                while j >= 0 and s[j].lower() not in validChar:
                    j -= 1
                if i >= j:
                    return True
                if s[i].lower() != s[j].lower(): 
                    return False
                i += 1
                j -= 1
            
    

      

  • 相关阅读:
    动态库的链接和链接选项-L,-rpath-link,-rpath
    SSL/TLS 握手过程详解
    数字证书及CA介绍
    sendto函数的坑
    如何捕捉并分析SIGSEGV的现场
    gdb进程调试,多进程调试
    linux下的守护进程daemon
    winform的水印TextBox
    Winform中的TextBox的小技巧
    WebForms UnobtrusiveValidationMode 需要“jquery”ScriptResourceMapping。请添加一个名为 jquery (区分大小写)的 ScriptRes
  • 原文地址:https://www.cnblogs.com/lautsie/p/3293160.html
Copyright © 2011-2022 走看看