标签:
/* * 125. Valid Palindrome * 2016-5-21 by Mingyang * 注意alphanumeric不仅仅是指数字还指字母哦,居然还有符号!! * 这个题目最阴险的地方就是符号也加入了进去,比如一个case是"a." * 那么这个就不行,因为我们现在是没有考虑符号,所以必须加入符号进去 * 关键1.如何变为大写 * 关键2.如何判断是否为符号 * 关键3.两个指针里面的while循环,low++以后一定要记得continue,因为有可能出界 */ public boolean isPalindrome(String s) { if (s == null || s.length() == 0) return true; s = s.trim(); char[] num = s.toCharArray(); StringBuffer sb = new StringBuffer(); for (int i = 0; i < num.length; i++) { char a = s.charAt(i); if (a >= ‘a‘ && a <= ‘z‘ || (a >= ‘A‘ && a <= ‘Z‘)) sb.append(Character.toLowerCase(a)); if ((a >= ‘0‘ && a <= ‘9‘)) sb.append(a); } String comp = sb.toString(); String res = sb.reverse().toString(); if (res.equals(comp)) return true; else return false; } // 下面给出两个指针的解法: public static boolean isPalindrome2(String s) { if (s.length() == 0) return true; s = s.toUpperCase();// 放心,并不会把数字也转了的 int low1 = ‘A‘, high1 = ‘Z‘; int low2 = ‘0‘, high2 = ‘9‘; int low = 0, high = s.length() - 1; while (low < high) { if ((s.charAt(low) < low1 || s.charAt(low) > high1) && (s.charAt(low) < low2 || s.charAt(low) > high2)) { low++; continue; } if ((s.charAt(high) < low1 || s.charAt(high) > high1) && (s.charAt(high) < low2 || s.charAt(high) > high2)) { high--; continue; } if (s.charAt(low) == s.charAt(high)) { low++; high--; } else return false; } return true; }
标签:
原文地址:http://www.cnblogs.com/zmyvszk/p/5516087.html