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(回文)的更多相关文章

  1. leetcode4 Valid Palindrome回文数

    Valid Palindrome回文数 whowhoha@outlook.com Question: Given a string, determine if it is a palindrome, ...

  2. LeetCode: Palindrome 回文相关题目

    LeetCode: Palindrome 回文相关题目汇总 LeetCode: Palindrome Partitioning 解题报告 LeetCode: Palindrome Partitioni ...

  3. hdu 1159 Palindrome(回文串) 动态规划

    题意:输入一个字符串,至少插入几个字符可以变成回文串(左右对称的字符串) 分析:f[x][y]代表x与y个字符间至少插入f[x][y]个字符可以变成回文串,可以利用动态规划的思想,求解 状态转化方程: ...

  4. Palindrome 回文数

    回文数,从前到后,从后到前都一样 把数字转成字符串来处理 package com.rust.cal; public class Palindrome { public static boolean i ...

  5. WHU 583 Palindrome ( 回文自动机 && 本质不同的回文串的个数 )

    题目链接 题意 : 给你一个串.要你将其划分成两个串.使得左边的串的本质不同回文子串的个数是右边串的两倍.对于每一个这样子的划分.其对答案的贡献就是左边串的长度.现在要你找出所有这样子的划分.并将贡献 ...

  6. 洛谷T89644 palindrome回文串

    洛谷 T89643 回文串(并查集) 洛谷:https://www.luogu.org/problem/T89643 题目描述 由于 Kiana 实在是太忙了,所以今天的题里面没有 Kiana. 有一 ...

  7. palindrome 回文 /// Manacher算法

    判断最长不连续回文 #include <bits/stdc++.h> using namespace std; int main() { ]; while(gets(ch)) { ],an ...

  8. [leetcode] 1. Valid Palindrome

    leetcode的第一题,回文数判断. 原题如下: For example, "A man, a plan, a canal: Panama" is a palindrome. & ...

  9. 回文(palindrome)

    如果一个字符串忽略标点符号.大小写和空格,正着读和反着读一模一样,那么这个字符串就是palindrome(回文).

随机推荐

  1. iOS开发之五:常用控件--UITextField的使用

    UITextField 是iOS开发中用的非常多的一种控件,主要是供用户输入单行信息的.下面来详细介绍UITextField. 1.常用属性 <span style="font-siz ...

  2. 【一天一道LeetCode】#107. Binary Tree Level Order Traversal II

    一天一道LeetCode 本系列文章已全部上传至我的github,地址:ZeeCoder's Github 欢迎大家关注我的新浪微博,我的新浪微博 欢迎转载,转载请注明出处 (一)题目 来源: htt ...

  3. Tomcat的管道

    Tomcat中按照包含关系一共有四个容器--StandardEngine.StandardHost.StandardContext和StandardWrapper,对这四个容器的详细解析后面会涉及,请 ...

  4. Linux之解决你的网络问题

    在网络方面,Linux系统通常可以正常的工作,但是偶尔也会出现让人心烦一些的问题,下面就是一些网络问题的常用的解决方案. 如果你的网络接口看起来已经启动和运行,但是不能访问因特网,这时你就可以试试pi ...

  5. javascript之JSON小案例,实现添加数据与清楚数据

    对json应用给出一个小案例,加深一些理解: <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" & ...

  6. Chipmunk僵尸物理对象的出现和解决(二)

    如第一篇文章中图片所示,该游戏是一个弹球游戏. 玩法很简单,屏幕底部有一个反弹棒,用来确保小球不掉出屏幕同时反弹小球撞击屏幕上方的砖块. 玩家可以触摸屏幕来左右移动反弹棒. 等等!还不是这么简单,当小 ...

  7. 抓包工具Fidder详解

    第一步:下载神器Fiddler,下载链接: http://fiddler2.com/get-fiddler 下载完成之后,傻瓜式的安装一下了! 现在这个下载链接失效了,可以百度下载 第二步:设置Fid ...

  8. 《java入门第一季》之Character类小案例

    /*  * Character 类在对象中包装一个基本类型 char 的值  * 此外,该类提供了几种方法,以确定字符的类别小写字母,数字,等等,并将字符从大写转换成小写,反之亦然  * */ 下面通 ...

  9. log4xx/log4j异步日志配置示例

    <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE log4j:configuration S ...

  10. 《java入门第一季》之Arrays类前传(排序问题)

    一:冒泡排序 /* * 数组排序之冒泡排序: * 相邻元素两两比较,大的往后放,第一次完毕,最大值出现在了最大索引处 * * 引申: * 利用冒泡排序法,可以获取一个数组的最大值(先冒泡排序,取最后一 ...