贪心算法 02

91 阅读1分钟

LeetCode 680

原题链接

代码如下:

/**
 * 贪心算法
 * 
 * 设置双指针从字符串两边往中间搜索
 * 字母相同则指针继续靠拢
 * 如果不同,根据题意可以删除一个字符,则只移动一个指针,判断子字符串是否满足条件
 * 即判断(i+1, j) || (i, j+1) 是否满足,如果还不满足,则不是
 * 
 * Code by java
 */

class Solution {
	public boolean validPalindrome(String s) {
		int i = 0, j = s.length() - 1;
		while (i < j) {
			if(s.charAt(i) != s.charAt(j)) {
				return isValid(s, i + 1, j) || isValid(s, i, j - 1);
			}
			i++;
			j--;
		}
		return true;
	}
	
	public boolean isValid(String s, int i, int j) {	//判断是否满足回文字符串
		while (i < j) {
			if(s.charAt(i) == s.charAt(j)) {
				i++;
				j--;
			} else {
				return false;
			}
		}
		return true;
	}
	
//	public static void main(String[] args) {
//		String a = new String("abca");
//		Solution kk = new Solution();
//		System.out.println(kk.validPalindrome(a));
//	}
}