Leetcode-valid-palindrome
2016-08-02 15:46
330 查看
题目描述
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.
题目较为简单,判断一个string是否回文,只考虑字母和数字。回到我们最熟悉的判断回文的方法。
我的方法:先去掉所有非数字字母的字符,用stringbuffer存储,因为stringbuffer有一个reverse()的API,可以直接倒置字符串。比较原先字符串和倒置后的字符串是否相等即可。
public class Solution { public boolean isPalindrome(String s) { s = s.toLowerCase(); StringBuffer sb = new StringBuffer(); for(int i=0; i<s.length(); i++) { if(s.charAt(i) >= 'a' && s.charAt(i) <= 'z' || s.charAt(i) >= '0' && s.charAt(i) <= '9') { sb.append(s.charAt(i)); } } String res = sb.toString(); String res1 = sb.reverse().toString(); if(res.equals(res1)) { return true; } else { return false; } } }下面介绍一个别人的方法,还是比较轻巧的。
定义两个指针left,right,分别指向字符串的第一个字符和最后一个字符,然后定义循环条件(left<right),如果字符是非字母数字,left++,right--,如果left,right此时指向的字符都是字母数字,则比较两个值,如果相等,left右移,right左移。如果不相等,return false即可。
public class Solution { public boolean isPalindrome(String s) { if(s == null) return false; char[] ch=s.toCharArray(); int left=0; int right=ch.length-1; while(left<right) { while(left<right&&isAlphaNum(ch[left]) == false) left++; while(left<right&&isAlphaNum(ch[right]) == false) right--; if(left<right) { if(ch[left]>='A'&&ch[left]<='Z') ch[left]=(char)(ch[left]-'A'+'a'); if(ch[right]>='A'&&ch[right]<='Z') ch[right]=(char)(ch[right]-'A'+'a'); if(ch[left] == ch[right]) { left++; right--; }else { return false; } } } return true; } public boolean isAlphaNum(char c) { if(c>='a'&&c<='z'||c>='A'&&c<='Z'||c>='0'&&c<='9') return true; else return false; } }
相关文章推荐
- [leetcode] Valid Palindrome @ Python
- Leetcode Valid Palindrome
- [LeetCode] Valid Palindrome II 验证回文字符串之二
- leetcode Valid Palindrome C++&python 题解
- Leetcode_valid-palindrome
- leetcode valid palindrome
- leetcode之Valid Palindrome
- leetcode Valid Palindrome
- Leetcode 680 Valid Palindrome II
- leetcode第26题(valid-palindrome)
- LeetCode(125)ValidPalindrome
- Leetcode: Valid Palindrome
- leetcode Valid Palindrome
- leetcode Valid Palindrome C++&python 题解
- LeetCode Valid Palindrome II
- LeetCode 第 125 题 (Valid Palindrome)
- Leetcode Valid Palindrome
- 【Leetcode】Valid Palindrome JAVA
- LeetCode Valid Palindrome Python
- leetcode Valid Palindrome