Algorithm
题目概述:
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.
import java.util.regex.Matcher; import java.util.regex.Pattern; public class Solution { public boolean isPalindrome(String s) { if (s == null) { return false; } s = getValidateStr(s); int len = s.length(); char[] chars = s.toCharArray(); String[] arr = new String[len]; for (int p=0;p<chars.length;p++) { arr[p]= String.valueOf(chars[p]); } //偶数 if (len % 2 == 0) { int leftIndex = len / 2 - 1; int rightIndex = len / 2; for (int l = leftIndex, r = rightIndex; l >= 0 && r < len; l--, r++) { if (!(arr[l].equals(arr[r]))) { return false; } } } else { //奇数 int midIndex = len / 2; for (int i = midIndex - 1, j = midIndex + 1; i >= 0 && j < len; i--, j++) { if (!(arr[i].equals(arr[j]))) { return false; } } } return true; } /** * 判断是否是合法字符 * * @return */ public String getValidateStr(String str) { str=str.toUpperCase(); String regx = "[A-Za-z0-9]*"; Matcher m = Pattern.compile(regx).matcher(str); StringBuilder stb = new StringBuilder(); while (m.find()) { int start = m.start(); int end = m.end(); String matchStr = str.substring(start, end); stb.append(matchStr); } return stb.toString(); } }