双指针 03

82 阅读1分钟

LeetCode 125

原题链接

代码如下:

/**
 * 双指针
 * 
 * left,right为字符串首末指针
 * 先遍历一遍字符串,将除了字母和数字之外的字符全部删除
 * 然后双指针向中间靠拢,判断是否相同
 * 
 * Code by java
 */

class Solution {
	public boolean isPalindrome(String s) {
		StringBuffer string = new StringBuffer();
		int len = s.length();
		for (int i = 0; i < len; i++) {
			char ch = s.charAt(i);
			if(Character.isLetterOrDigit(ch)) {
				string.append(ch);
			}
		}
		int n = string.length();
		int left = 0, right = n - 1;
		while(left <= right) {
			if(Character.toLowerCase(string.charAt(left)) != Character.toLowerCase(string.charAt(right))) {
				return false;
			}
			left++;
			right--;
		}
		return true;
	}

	public static void main(String[] args) {
		Solution a = new Solution();
		String s = "A man, a plan, a canal: Panama";
		System.out.println(a.isPalindrome(s));
	}
}