在 上提的基礎上,可以刪除字符,也就是可以跳過某些字符
package KTwoPointers;
import AarrayProblem.Problem1;
/**
* @Author Zhou jian
* @Date 2020 ${month} 2020/5/4 0004 01:02
*/
public class Problem680 {
/**
*
* @param s
* @return
* 兩個指針分別指向字符串的頭部和尾部,遍歷字符串,當首位的兩個指針所執向的字符相等時
* 兩個指針向中心靠攏
* 當首位兩個指針所執向的字符不相等時,嘗試跳過左邊的一個字符,繼續比較,如果扔不先更則還遠左邊的指針到之前的位置嘗試跳過右邊的一個字符,繼續比較
* 如果兩個指針指向的字符還是不等,則結束遍歷
*/
public boolean validPalindrome(String s) {
int index = 0;
//左指針
int left = 0;
//右指針
int right = s.length() - 1;
while (left <= right) {
//字符相等
if (s.charAt(left) == s.charAt(right)) {
left++;
right--;
} else {
//嘗試跳過左邊指針指向的字符,繼續比較
if (index == 0) {
left++;//跳過左邊指針,繼續下次比較
index++;
continue;
}
//說明嘗試跳過左邊指針指向的字符失敗,先還原左邊指針指向的字符,嘗試跳過右邊指針指向的字符
if (index == 1) {
left--;//還原左邊指針
right--;//跳過右邊指針
index++;
continue;
}
//如果經過兩次嘗試之後兩邊字符還不相等,則返回false
if (index > 1) {
return false;
}
}
}
return true;
}
}