zoukankan      html  css  js  c++  java
  • 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.

    判断一个字符串是否是回文字符串,该字符串由数字和字母组成,字母不区分大小写。如果字符串中有其他字符,则跳过这些字符,不用管这些字符。。空串假设是回文。

    1.自己的解法。。将不符合要求的字符去除,也就是将符合要求的字符另外存起来成为合法字符串,这里用StringBuilder,然后不区分大小写比较合法字符串和它的反串是否相等。StringBuilder有reverse方法,String没有。

    public boolean isPalindrome(String s) {
            //先将子母和数字找出来存放起来,用StringBuilder,然后不考虑大小写比较该串和它的反转串,因为StringBuilder有reverse方法,String没有。
            if(s==null) return true;
            StringBuilder sb=new StringBuilder();
            for(int i=0;i<s.length();i++){
                char ch=s.charAt(i);
                if(ch<='z'&&ch>='a'||ch<='Z'&&ch>='A'||ch<='9'&&ch>='0')
                    sb.append(ch);
            }
            
            String s1=sb.toString();
            return s1.toLowerCase().equals(sb.reverse().toString().toLowerCase());
        }

    2、上面去除不符合要求的步骤可以使用正则表达式

    public boolean isPalindrome(String s) {
            //正则表达式,将所有非子母和数字的字符用“” 代替,然后还是要比较该串和它的反转串,所以还是需要用StringBuilder最后存字符串。
            //这里相对于上面就是用正则表达式来替换那些没用的字符了
            if(s==null) return true;
            String s1=s.replaceAll("[^A-Za-z0-9]","").toLowerCase();
            String rev=new StringBuilder(s1).reverse().toString();
            return s1.equals(rev);
        }

    3、直接比较,从头尾开始比较字符是否相等,跳过不合法字符。这种方法最快。

    这里用到了Character的一些方法
     public boolean isPalindrome(String s) {
            //直接比较了,先不去掉不合法的字符,也不转成反串。直接从两头比较,跳过不合法的字符,这里用到了Character的一些方法
            if(s==null) return true;
            int start=0,end=s.length()-1;
            while(start<end){
                char st=s.charAt(start);
                if(!Character.isLetterOrDigit(st))  {start++; continue;}//跳过不符合要求的
                 char e=s.charAt(end);
                if(!Character.isLetterOrDigit(e))  {end--;continue;}
                if(Character.toLowerCase(st)!=Character.toLowerCase(e)) return false;
                start++;
                end--;
            }
            return true;
        }
  • 相关阅读:
    黑马程序员_网络编程
    黑马程序员_ 异常
    黑马程序员_面向对象基础
    黑马程序员_循环语句的使用
    黑马程序员_面向对象深入2
    黑马程序员_ JAVA中的多线程
    黑马程序员_JAVA基础知识总结3
    OC-内存管理
    OC-核心语法(3)(分类、SEL、类本质)
    OC-核心语法2-构造方法
  • 原文地址:https://www.cnblogs.com/xiaolovewei/p/8082267.html
Copyright © 2011-2022 走看看