您的位置:首页 > 编程语言 > Java开发

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

2019-03-07 19:44 281 查看

题目描述:

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

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

示例 1:

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

示例 2:

[code]输入: "race a car"
输出: false

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

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

    这道题有两种思路:

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

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

 

[code]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

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: