剑指 Offer II 018. 有效的回文
这题不难,但是很多细节问题:
- 除了数字和字母,其它字符都跳过。
判断字符是否相等,先使用
Character.toLowerCase(char c)转换为小写字母,然后再使用==判断即可。class Solution {public boolean isPalindrome(String s) {if (s == null || s.length() == 0) return true;int left = 0, right = s.length() - 1;while (left < right) {while (left < right && pass(s.charAt(left))) left++;while (left < right && pass(s.charAt(right))) right--;if (!isSame(s.charAt(left),s.charAt(right))) return false;left++;right--;}return true;}// 与运算是不行的,对OP来说会返回错误private boolean isSame(char a, char b) {a = Character.toLowerCase(a);b = Character.toLowerCase(b);// System.out.println(a + " ," + b + ", " + (a - b));// int diff = Math.abs(a - b);// return diff == 32 || diff == 0;return a == b;// a = (char)(a | 32);// b = (char)(b | 32);// if (a == b) return true;// else return false;}private boolean pass(char c) {c = (char)(c | 32);if (c >= 'a' && c <='z' || c >= 'A' && c <= 'Z' || c >= '0' && c <= '9') return false;else return true;}}
