給定一個非空字符串 s劝萤,最多刪除一個字符得滤。判斷是否能成為回文字符串际歼。
實例1:輸入“aba” 輸出true
實例2:輸入“abac” 輸出true
主要的算法思想
1.檢測回文字符串
回文字符串的檢測其實就是要設(shè)立兩個指針资柔,一個從最左邊開始依次向右指煎,另一個從最右邊依次往左活箕,直到兩個指針重合時先壕,兩個指針的移動是同步的嗡害,看這兩個指針指的字符是否每個都相同
2.最多刪除一個
也就是在這個過程中琢歇,例如左邊遍歷到i兰怠,右邊遍歷到j(luò)時梦鉴,出現(xiàn)了字符不相同的情況,我們可以用改變參數(shù)的方法來實現(xiàn)刪除一個元素揭保,改為(i+1肥橙,j)或者改為(i,j-1)秸侣,兩種情況都需要計算能否判斷是回文字符串
class Solution{
public boolean validPalindrome(String s) {
for(int i = 0, j = s.length() - 1;i < j;i++,j--){
if(s.charAt(i) != s.charAt(j)){
//用了其他函數(shù)繼續(xù)刪除后的遍歷
return isPalindrome(s,i,j-1) || isPalindrome(s,i+1,j);
}
}
return true;
}
private boolean isPalindrome(String s,int i,int j){
while(i < j){
if(s.charAt(i++) != s.charAt(j--)){
return false;
}
}
return true;
}
}