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;
}
valid palindrome(回文)的更多相关文章
- leetcode4 Valid Palindrome回文数
Valid Palindrome回文数 whowhoha@outlook.com Question: Given a string, determine if it is a palindrome, ...
- LeetCode: Palindrome 回文相关题目
LeetCode: Palindrome 回文相关题目汇总 LeetCode: Palindrome Partitioning 解题报告 LeetCode: Palindrome Partitioni ...
- hdu 1159 Palindrome(回文串) 动态规划
题意:输入一个字符串,至少插入几个字符可以变成回文串(左右对称的字符串) 分析:f[x][y]代表x与y个字符间至少插入f[x][y]个字符可以变成回文串,可以利用动态规划的思想,求解 状态转化方程: ...
- Palindrome 回文数
回文数,从前到后,从后到前都一样 把数字转成字符串来处理 package com.rust.cal; public class Palindrome { public static boolean i ...
- WHU 583 Palindrome ( 回文自动机 && 本质不同的回文串的个数 )
题目链接 题意 : 给你一个串.要你将其划分成两个串.使得左边的串的本质不同回文子串的个数是右边串的两倍.对于每一个这样子的划分.其对答案的贡献就是左边串的长度.现在要你找出所有这样子的划分.并将贡献 ...
- 洛谷T89644 palindrome回文串
洛谷 T89643 回文串(并查集) 洛谷:https://www.luogu.org/problem/T89643 题目描述 由于 Kiana 实在是太忙了,所以今天的题里面没有 Kiana. 有一 ...
- palindrome 回文 /// Manacher算法
判断最长不连续回文 #include <bits/stdc++.h> using namespace std; int main() { ]; while(gets(ch)) { ],an ...
- [leetcode] 1. Valid Palindrome
leetcode的第一题,回文数判断. 原题如下: For example, "A man, a plan, a canal: Panama" is a palindrome. & ...
- 回文(palindrome)
如果一个字符串忽略标点符号.大小写和空格,正着读和反着读一模一样,那么这个字符串就是palindrome(回文).
随机推荐
- 【一天一道LeetCode】#225. Implement Stack using Queues
一天一道LeetCode 本系列文章已全部上传至我的github,地址:ZeeCoder's Github 欢迎大家关注我的新浪微博,我的新浪微博 欢迎转载,转载请注明出处 (一)题目 Impleme ...
- (NO.00004)iOS实现打砖块游戏(十三):伸缩自如,我是如意金箍棒(下)!
大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请告诉我,如果觉得不错请多多支持点赞.谢谢! hopy ;) 准备缩短反弹棒素材 和上一篇类似,我们如法炮制一张缩短后反弹棒的 ...
- iOS开发之二:UIWindow与UIView
1.UIWindow UIWindow 继承自UIView,它是整个应用的容器,一般来说一个应用就只有一个UIWindow. 如果不使用storyboard 时,需要我们自己创建UIWindow.实例 ...
- 盘点:2016中国百强地产CIO高峰论坛的8大看点
2016年中国百强地产CIO高峰论坛将于2016年6月16日至18日在浙江湖州举行,届时百余位地产公司CIO将出席大会,共同探讨新形势下如何重塑IT价值,增强地产公司的市场竞争力和盈利能力. 此次大会 ...
- Android开发-Listview中显示不同的视图布局
1. 使用场景 在重写ListView的BaseAdapter时,我们常常在getView()方法中复用convertView,以提高性能.convertView在Item为单一的同种类型布局时,能够 ...
- golang:使用timingwheel进行大量ticker的优化
Ticker 最近的项目用go实现的服务器需要挂载大量的socket连接.如何判断连接是否还存活就是我们需要考虑的一个问题了. 通常情况下面,socket如果被客户端正常close,服务器是能检测到的 ...
- 【一天一道LeetCode】#79. Word Search
一天一道LeetCode 本系列文章已全部上传至我的github,地址:ZeeCoder's Github 欢迎大家关注我的新浪微博,我的新浪微博 欢迎转载,转载请注明出处 (一)题目 Given a ...
- Spring揭秘 读书笔记 七 BeanFactory的启动分析
首先,先看我自己画的BeanFactory启动时的时序图. 第一次接触时序图,可能有些地方画的不是很符合时序图的规则,大家只关注调用顺序即可. public static void main(Stri ...
- 关于对数组和指针的测试与分析OC
前言: 这个笔试题想必很多小伙伴都很面熟把,差不多10个人有7个人不会做这道笔试题,或许有知道答案的,但是仅仅知道答案,心里还是一头雾水.如果你真的不会那就请认真看完本文学习一下吧! 错误想法: 有的 ...
- 100个iOS开发面试题汇总
100个iOS开发面试题汇总 关于iOS开发面试,不管对于招聘和应聘来说,面试都是很重要的一个环节,特别对于开发者来说,面试中的技术问题环节不仅是企业对应聘者技能和积累的考察,也是一个开发者自我检验的 ...