Leetcode题库 - 验证回文串(java语言版)

题目描述:

给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。

说明:本题中,我们将空字符串定义为有效的回文串。

示例 1:

输入: "A man, a plan, a canal: Panama"
输出: true

示例 2:

输入: "race a car"
输出: false

    这个问题和回文数的那个问题特别相似,不过这个不能用回文数的那种方法,想看回文数怎么实现的,看我的这一片博客:

https://blog.csdn.net/weixin_37850160/article/details/86525337

    这道题有两种思路:

      第一种就是用内置函数,revese这个字符串反转方法,然后和反转之前的原字符串进行比较,相同就是回文串,不相同则不是(这两种思路首先都得进行预处理,将特殊字符去掉,可以用正则表达式,也可以用字符串的替换方法,第一个参数是模式匹配参数,匹配到时替换掉特殊字符就行。) (这种方式不推荐使用,因为没有用到过多的算法)

      第二种方法:就是用对撞指针,和昨晚的那个《两数之和输入有序数组》那道题特别像,就是一个是int,一个是string。定义两个指针,然后一个指向首位,一个指向末尾,(必须先进行预处理),判断是否相等,若相等,就让两个指针一个向前,一个向后,在进行判断,如果不相等则输出flase(不是回文串),最后在for外输出true(是回文串),因为若for执行完不返回flase,则证明字符串是回文串。

 

public static void main(String[] args){
        String  str= "A man, a plan, a canal: Panama";
//        模式匹配的字符串(也可以用[^a-zA-Z0-9]除了这些之外的字符,推荐这个,简洁)
        String regEx="[\n`~!@#$%^&*()+=|{}':;',\\[\\].<>/?~!@#¥%……&*()——+|{}【】‘;:”“’。, 、?]";
//        正则表达式匹配(匹配模式)
//        Pattern par =Pattern.compile (regEx);
        要匹配的字符串
//        Matcher m = par.matcher ( str );
        用空字符串代替匹配到的特殊字符,去掉首末的空格
//        String str2 = m.replaceAll ( "" ).trim ().toLowerCase ();

        String str2 = str.replaceAll ( regEx,"" ).toLowerCase ();
        System.out.println(str2);
        int j = str2.length ()-1;
        for(int i = 0;i<str2.length ();){
            if (str2.charAt ( i )==str2.charAt ( j)){
                i++;
                j--;
            }else {
                System.out.println("不是回文串");
                break;
            }
        }
        System.out.println("是回文串");
    }

执行结果:

执行用时:

 总结:这道题和上一道题都是对撞指针法,这种放法对数组进行操作十分遍历和有效。是一个非常不错的方法。

   2019-3-7

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值