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
相关文章推荐
- Leetcode题库 - 快乐数(java语言版)
- Leetcode题库 - 两个数组的交集(java语言版)
- Leetcode题库 - 存在重复元素(java语言版)
- Leetcode题库 - 有效的字母异位词(java语言版)
- Leetcode题库-字母异位词分组(java语言版)
- Leetcode题库-回旋镖的数量(java语言版)
- Leetcode题库 - 三数之和(java语言版)
- Leetcode题库-四数之和(java语言版)
- Leetcode题库 - 同构字符串(java语言版)
- Leetcode题库 - 两个数组的交集2(java语言版)
- Leetcode题库 - 反转字符串中的元音字母(java语言版)
- Leetcode题库 - 根据字符出现频率排序(java语言版)
- Leetcode题库 - 盛最多水的容器(java语言版)
- Leetcode题库 - 长度最小的子数组(java语言版)
- Leetcode题库-存在重复元素2(java语言版)
- Leetcode题库-四数相加2(java语言版)
- Leetcode题库-存在重复元素3(java语言版)
- Leetcode刷题28-125.验证回文串(C++)
- LeetCode-探索-初级-字符串-验证回文字符串-java
- 手撕代码:Java实现LeetCode最长回文串