Valid Palindrome ——判断字符串是否为回文串

本文是在学习中的总结,欢迎转载但请注明出处:http://blog.csdn.net/pistolove/article/details/41488377

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.

Note:

Have you consider that the string might be empty? This is a good question to ask during an interview.

For the purpose of this problem, we define empty string as valid palindrome.

通过本文你可能会学到的知识为:

(1)对String类中的valueOf()方法、charAt()方法、equalsIgnoreCase()方法有所了解,并知道如何使用。

(2)对Character类中的isLetterOrDigit()方法有所了解。

(3)理解解题思路,提高分析问题的能力。

注:

String类: valueOf()方法——返回指定类型参数的字符串表示形式。

charAt(char c)方法——返回指定索引处的 char 值。

equalsIgnoreCase()方法——对两个String进行比较,不考虑大小写。

Character类:

isLetterOrDigit(char c)方法——确定指定字符是否为字母或数字。

思路:

(1)解读题意:1. 需要去掉非数字和非字母字符,对剩余字符串是否为回文串进行判断。说白了就是判断该字符串是否轴对

称。2. 空字符串是回文的。3.只含有标点或其它特殊符号的字符串是回文的。

(2)既然是判断字符串是否轴对称,那么,分别从字符串起始位置和结束位置开始进行比较,对于开始字符或者结束字符,首

先判断其是否为数字或字母,如果不是,对于开始位置,则继续向右寻找第一个是字母或者数字的字符,对于结束位置,则继续

向左寻找第一个是字母或者数字的字符,如果从起始位置向右或者结束位置向左遍历完整个字符串还未找到第一个出现的数值为

字母或数字的字符,则返回true。

(3)如果起始位置对应字符和结束位置对应字符都是字母或者数字,但数值不同,则不是回文字符串,返回false;如果相同,

则起始位置右移,结束位置左移,继续按照(2)进行判断,依此类推,如果都判断完成且没有返回false,那么说明字符串为回文

串,返回true。

算法实现代码如下所示:(PS:本人技术有限,目前尚不能写出简短高效的代码,大家有好的算法希望能够分享,谢谢)

public boolean isPalindrome(String s) {
	if (s.length() == 0) return true;
	int len = s.length();
	int start = 0;
	int end = len - 1;

	while (start != end && start < end) {
		String s1 = "";
		String s2 = "";

		while (start < len) {
			if (Character.isLetterOrDigit(s.charAt(start)) != true) {
				start++;
			} else {
				s1 = String.valueOf(s.charAt(start));
				break;
			}
		}

		if (start == len - 1
				&& Character.isLetterOrDigit(s.charAt(start)) == true)
			return true;

		while (end > 0) {
			if (Character.isLetterOrDigit(s.charAt(end)) != true) {
				end--;
			} else {
				s2 = String.valueOf(s.charAt(end));
				break;
			}
		}

		if (end == 0 && Character.isLetterOrDigit(s.charAt(end)) == true)
			return true;

		if (s1.equalsIgnoreCase(s2)) {
			start++;
			end--;
		} else {
			return false;
		}
	}
	return true;
}
时间: 2024-11-08 19:13:11

Valid Palindrome ——判断字符串是否为回文串的相关文章

用递归方法判断字符串是否是回文(Recursion Palindrome Python)

所谓回文字符串,就是一个字符串从左到右读和从右到左读是完全一样的.比如:"level" ."aaabbaaa". "madam"."radar". 如何判断字符串是否是回文呢?解决思路如下: 1. 采取穷举法(Brute Force algorithm),枚举并检查(enumerate & check)字串符的第一项和最后一项是否等同 2. 把检查范围逐步缩小,如果字串符的第一项和最后一项等同,那么去除字串符的第一项和

AC日记——判断字符串是否为回文 openjudge 1.7 33

33:判断字符串是否为回文 总时间限制:  1000ms 内存限制:  65536kB 描述 输入一个字符串,输出该字符串是否回文.回文是指顺读和倒读都一样的字符串. 输入 输入为一行字符串(字符串中没有空白字符,字符串长度不超过100). 输出 如果字符串是回文,输出yes:否则,输出no. 样例输入 abcdedcba 样例输出 yes 思路: 模拟: 来,上代码: #include<cstdio> #include<string> #include<cstring>

Java 用递归判断字符串是否可以回文

设计思想: 判断字符串是否可以回文,首先字符串长度为0,或只有一个字符,即字符串长度为1是可以回文的:再然后字符串长度大于1,让第一个字符和最后一个比较,若相等,则用递归,调用函数比较第二个和倒数第二个,以此类推. 源代码: package test2; import java.util.Scanner; public class jiecheng { public static void main(String[] args) { // TODO 自动生成的方法存根 System.out.pr

Java - 判断字符串是否是回文

首先,回文是指类似于“12345”,“abcdcba”的形式,即正念和反念都是一样的字符串 判断字符串是否是回文,这边介绍3种办法 将字符串翻转,判断翻转后的字符串和原字符串是否相等 1 public static void main(String[] args) { 2 String s="abcdcba"; 3 // 用StringBuilder的reverse方法将字符串反转 4 StringBuilder sb=new StringBuilder(s); 5 String af

HDU 4632 Palindrome subsequence(区间dp,回文串,字符处理)

题目 参考自博客:http://blog.csdn.net/u011498819/article/details/38356675 题意:查找这样的子回文字符串(未必连续,但是有从左向右的顺序)个数. 简单的区间dp,哎,以为很神奇的东西,其实也是dp,只是参数改为区间,没做过此类型的题,想不到用dp,以后就 知道了,若已经知道[0,i],推[0,i+1], 显然还要从i+1 处往回找,dp方程也简单: dp[j][i]=(dp[j+1][i]+dp[j][i-1]+10007-dp[j+1][

递归判断字符串是否为回文

源代码 package test; import java.util.Scanner; public class Palindrome { public static void main(String[] args) {  System.out.println("请输入判断的字符串");  Scanner scan=new Scanner(System.in);  String str=scan.next();  int n = str.length();  boolean flag=

C++刷题——2802: 判断字符串是否为回文

Description 编写程序,判断输入的一个字符串是否为回文.若是则输出"Yes",否则输出"No".所谓回文是指順读和倒读都是一样的字符串. Input Output Sample Input abcddcba Sample Output Yes /* Copyright (c) 2014, 烟台大学计算机学院 * All rights reserved. * 文件名称:test.cpp * 作者:陈丹妮 * 完成日期:2015年 6 月 1 日 * 版 本

用递归方式判断字符串是否是回文

题目要求:使用递归方式判断某个字串是否是回文( palindrome )回文”是指正着读.反着读都一样的句子.比如“我是谁是我” package zzm; import java.util.Scanner; public class Hw { static Scanner input=new Scanner(System.in); public static void main(String[] args) { System.out.print("请输入一串字符:"); String

URAL 1297. Palindrome(后缀数组求最大回文串)

题目大意:给你一串字符串,让你求出来它存在的最长连续的回文串. 解题思路:先把字符串逆序加到数组中,然后用后缀数组求解.两种方法:1,枚举排名,直接比较rank相同的字符串的位置差是不是len.如果是的话,就记录求解:2,枚举地址,求第i地址与第2*len-i+1的lcp的最大值. PS:需要注意如果多解输出靠前的字符串. 两种写法写在了一起,分别是Del,和Del1函数. 1297. Palindrome Time limit: 1.0 second Memory limit: 64 MB T