leedcode做题总结,题目Valid Palindrome 2013/01/12
2014-07-15 21:19
267 查看
这道题思路很简单,把字符串拆成单个字符,过滤掉非数字字母,留下的数组从前和后同时开始比对,如果出现不同则非回文。
注意的有,题目中不区分大小写,Aa也是回文,所以判断时不能只是用char来==,还要判断差的绝对值是否为32。
还有如果while中优势需要i++的可以直接用a[i++]即可,但是要注意if的条件里不要出现两次a[i++]
还有就是记住 '0'-'9'==48-57
'A'-'Z'==65-90
'a'-'z'==97-122
还有如果不用分隔出来单词,要分隔出字符,使用charAt()比split("")好用
Update 2015/08/18: 上面的做法新建了一个char数组其实是没有必要的,下面的做法将所有字符判断前先转为大写不如直接用绝对值差32判断简介,同时要注意‘A’-32返回的是int 不是char
注意的有,题目中不区分大小写,Aa也是回文,所以判断时不能只是用char来==,还要判断差的绝对值是否为32。
还有如果while中优势需要i++的可以直接用a[i++]即可,但是要注意if的条件里不要出现两次a[i++]
还有就是记住 '0'-'9'==48-57
'A'-'Z'==65-90
'a'-'z'==97-122
还有如果不用分隔出来单词,要分隔出字符,使用charAt()比split("")好用
public static boolean isPalindrome(String s) { int num=s.length(); char[] sa = new char[num]; int j=0; for (int i = 0; i <num ; i++) { if(s.charAt(i)>47&&s.charAt(i)<58) sa[j++]=s.charAt(i); else if(s.charAt(i)>64&&s.charAt(i)<91) sa[j++]=s.charAt(i); else if(s.charAt(i)>96&&s.charAt(i)<123) sa[j++]=s.charAt(i); } int i=0; j--; while (i<j){ if(sa[i]!=sa[j]&&Math.abs(sa[i]-sa[j])!=32) return false; i++; j--; } return true; }
Update 2015/08/18: 上面的做法新建了一个char数组其实是没有必要的,下面的做法将所有字符判断前先转为大写不如直接用绝对值差32判断简介,同时要注意‘A’-32返回的是int 不是char
public class Solution { /** * @param s A string * @return Whether the string is a valid palindrome */ public boolean isPalindrome(String s) { // Write your code here if (s.equals("")) return true; int i = 0; int j = s.length()-1; while (i <= j){ if (s.charAt(i) < '0'||(s.charAt(i) > '9' && s.charAt(i) < 'A') || (s.charAt(i) > 'Z' && s.charAt(i) < 'a') || s.charAt(i) > 'z'){ i++; continue; } if (s.charAt(j) < '0'||(s.charAt(j) > '9' && s.charAt(j) < 'A') || (s.charAt(j) > 'Z' && s.charAt(j) < 'a') || s.charAt(j) > 'z'){ j--; continue; } int a = s.charAt(i) > 96 ? s.charAt(i) - 32: s.charAt(i); int b = s.charAt(j) > 96 ? s.charAt(j) - 32: s.charAt(j); if (a != b) return false; else { i++; j--; } } return true; } }
相关文章推荐
- leedcode做题总结,题目Flatten Binary Tree to Linked List 2012/10/14
- leedcode做题总结,题目Populating Next Right Pointers in Each NodeI/II---------- 2012/10/28
- leedcode做题总结,题目Single NumberI/II 2013/10/01-02
- leedcode做题总结, 题目Median 80
- leedcode做题总结,题目Binary Tree Level Order TraversalI/II 2012/09/28
- leedcode做题总结,题目Minimum Depth of Binary Tree 2012/10/09
- leedcode做题总结, 题目Maximum Subarray II & Maximum Subarray Difference
- leedcode做题总结, 题目Surrounded Regions130
- leedcode做题总结,题目Symmetric Tree 2012/09/23
- leedcode做题总结,题目Binary Tree Postorder Traversal-------- 2013/11/07
- leedcode做题总结,题目Reverse Integer----- 2011/12/25
- leedcode做题总结,题目Median of Two Sorted Arrays----- 2011/03/27
- leedcode做题总结,题目Reverse Words in a String14/03/05
- leedcode做题总结,题目Gas Station-------- 2013/09/28
- leedcode做题总结,题目Convert Sorted Array to Binary Search Tree 2013/02/18
- leetcode做题总结,题目Remove Duplicates from Sorted ListI/II 2012/04/22
- leedcode做题总结,题目Path SumI/II-------- 2012/10/13-14
- leedcode做题总结,题目Binary Tree Zigzag Level Order Traversal 2012/09/28
- leetcode做题总结,题目Integer to Roman 2012/01/15
- leedcode做题总结,题目Reorder List 13/11/12