美文网首页
判断一个字符串是不是回文

判断一个字符串是不是回文

作者: EmonH | 来源:发表于2020-03-16 19:52 被阅读0次

    几天前找工作,面试官问了我一个算法题,我竟然没有答上来。痛定思痛决定深入研究下。
    问题是这样的:给一字符串String s = "A1 man, a plan, a canal: Panam1a";忽略字母大小写的情况下,只判断里面的字符和数字组成的字符串是不是回文。
    要解决这样的问题我们先从简单的字符串判断回文说起。首先我们使用递归的方法判断一个普通的字符串是不是回文

     public static boolean isPa(String s){
            if(s.charAt(0) == s.charAt(s.length() - 1)){
                if(s.length() > 2){
                    return isPa(s.substring(1,s.length()-1));
                }else{
                    return true;
                }
            }
            return false;
        }
    

    依据上面的方法我们来解决那个特殊的字符串

    public static boolean isPa(String s){
            if(!isDigLet(s.charAt(0))){
                return isPa(s.substring(1,s.length()));
            };
            if(!isDigLet(s.charAt(s.length() -1))){
                return isPa(s.substring(0,s.length() -1));
            };
            if(s.charAt(0) == s.charAt(s.length() -1)){
                if(s.length() > 2){
                    return isPa(s.substring(1,s.length()-1));
                }else{
                    return true;
                }
            }else{
                return false;
            }
        }
    public static void main(String[] str) {
            String s = "A man, a plan, a canal: Panama";
            // String s = "amanaplanacanalpanama";
            s = s.toLowerCase();
            System.out.println(isPa(s));
        }
    

    当然了,对于java来说丰富的接口函数,实现这样的功能简直“洒洒水啦”,可惜面试官不让使用replaceAll函数,也就可惜了。

    public static boolean isPa(String s){
        String str = s.toLowerCase().replaceAll("[^a-zA-Z0-9]","").toLowerCase();
        StringBuilder stringBuffer = new StringBuilder(str);
        String ss = stringBuffer.reverse().toString();
        if(str.equals(ss)){
            return true;
        }else{
            return false;
        }
    }
    

    相关文章

      网友评论

          本文标题:判断一个字符串是不是回文

          本文链接:https://www.haomeiwen.com/subject/zfibehtx.html