一、题目
1、审题
2、分析
判断所给的字符串(只考虑数字、字母)是否为回文。
二、解答
1、思路:
方法一、
用 start、end 指针分别从 s 的开头和结尾开始遍历,并进行比较。
public boolean isPalindrome(String s) { int len = s.length(); if(len == 0) return true; int start = 0, end = len - 1; while(start < end) { char c1 = s.charAt(start); char c2 = s.charAt(end); if(!Character.isLetterOrDigit(c1)) start++; else if(!Character.isLetterOrDigit(c2)) end--; else if(Character.toLowerCase(c1) == Character.toLowerCase(c2)) { start++; end--; } else return false; } return true; }
方法二、
先采用正则替换掉 s 中的非数字、字母,在翻转 s 与原串进行比较。
public boolean isPalindrome2(String s) { s = s.replaceAll("[^A-Za-z0-9]", "").toLowerCase(); String tmp = new StringBuffer(s).reverse().toString(); return s.equals(tmp); }