zoukankan      html  css  js  c++  java
  • [leetCode]125.验证回文串


    筛选+反转

    回文串将其反转之和还是它本身。先将字母和数字筛选出来放入StringBuffer中,再进行反转判断。

    class Solution {
        public boolean isPalindrome(String s) {
            int len = s.length();
            if(len == 0) return true;
            StringBuffer sgood = new StringBuffer();
            for(int i = 0; i < len; i++){
                if(Character.isLetterOrDigit(s.charAt(i))){
                    sgood.append(Character.toLowerCase(s.charAt(i)));
                }
            } 
            StringBuffer sgood_rev = new StringBuffer(sgood).reverse(); 
            return sgood.toString().equals(sgood_rev.toString());
        }
    }
    

    双指针

    定义两个指针,跳过非数字和字母,一个向右移动一个向左移动,如果所指向的字符不等则不是回文串,如果指针相遇循环结束则是回文串。

    class Solution {
        public boolean isPalindrome(String s) {
            int len = s.length();
            if(len == 0) return true;
            s = s.toLowerCase();
            int lo = 0, hi = len - 1;
            //不能跳过数字
            while(lo < len && (s.charAt(lo) <'a' || s.charAt(lo) > 'z') && (s.charAt(lo) <'0' || s.charAt(lo) > '9')){
                lo++;
            }
            while(hi > 0 && (s.charAt(hi) <'a' || s.charAt(hi) > 'z') && (s.charAt(hi) <'0' || s.charAt(hi) > '9')){
                hi--;
            } 
            while(lo<=hi) {
                if(s.charAt(lo) == s.charAt(hi)){
                    lo++;
                    while(lo < len && (s.charAt(lo) <'a' || s.charAt(lo) > 'z') && (s.charAt(lo) <'0' || s.charAt(lo) > '9')){
                        lo++;
                    }
                    hi--;
                    while(hi > 0 && (s.charAt(hi) <'a' || s.charAt(hi) > 'z') && (s.charAt(hi) <'0' || s.charAt(hi) > '9')){
                        hi--;
                    } 
                }else{
                    return false;
                }
            }
            return true;
        }
    }
    

    把上面的代码优化一下

    class Solution {
        public boolean isPalindrome(String s) {
            int len = s.length();
            if(len == 0) return true;
            s = s.toLowerCase();
            int lo = 0, hi = len - 1;
            while(lo < hi) {
                while(lo < hi && !Character.isLetterOrDigit(s.charAt(hi))){
                    hi--;
                } 
                while(lo < hi && !Character.isLetterOrDigit(s.charAt(lo))){
                    lo++;
                }
                if(s.charAt(lo) != s.charAt(hi))
                    return false;
                lo++;
                hi--;  
            }
            return true;
        }
    }
    
  • 相关阅读:
    为SharePoint 2010中的FBA创建自定义登录页面
    SharePoint 2010设置问卷调查权限
    无法创建您的个人网站,因为未启用“自助式网站创建”
    等级歧视的死循环[转]
    职业生涯中的10个致命错误
    项目经理须具备所有9 大知识领域
    项目管理工具和技术
    在SharePoint Server 2010中创建“我的网站”
    MATCH_PARENT是什么类型的布局
    Android 在代码中获取手机屏幕的宽高
  • 原文地址:https://www.cnblogs.com/PythonFCG/p/13860002.html
Copyright © 2011-2022 走看看