题目
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.先把字符串转换为小写的
2.两个下标分别从头从尾开始扫描
3.要过滤掉不是数字字母的字符
代码如下:
//方法一: public class Solution { public boolean isPalindrome(String s) { if(s==null) return true; //空字符串是true int i=0; int l=s.length()-1; while(i<l){ if(!isValidChar(s.charAt(i))){ i++; continue; } if(!isValidChar(s.charAt(l))){ l--; continue; } if(!isSameChar(s.charAt(i),s.charAt(l))){ return false; } i++; l--; } return true; } public boolean isValidChar(char ch){ if((ch>='a'&&ch<='z')||(ch>='A'&&ch<='Z')||(ch>='0'&&ch<='9')) return true; else return false; } public boolean isSameChar(char ch1,char ch2){ if(ch1>='A'&&ch1<='Z') ch1=(char)(ch1+32); if(ch2>='A'&&ch2<='Z') ch2=(char)(ch2+32); return ch1==ch2; } } //方法二:先用正则表达式去除无效的字符 public boolean isPalindrome(String s){ s=s.replaceAll("[^a-zA-Z0-9]","").toLowerCase(); int len=s.length(); if(len<2) return true; Stack<Character> stack=new Stack<Character>(); int index=0; while(index<len/2){ stack.push(s.charAt(index)); index++; } if(len%2==1) index++; while(index<len){ /* if(stack.empty()){ return false; }*/ char temp=stack.pop(); if(s.charAt(index)!=temp) return false; else index++; } return true; }
---EOF---
【LeetCode】Valid Palindrome,布布扣,bubuko.com
原文地址:http://blog.csdn.net/navyifanr/article/details/36187749