lc 680 驗證迴文串II
阿新 • • 發佈:2021-01-31
技術標籤:雙指標
給定一個非空字串 s,最多刪除一個字元。判斷是否能成為迴文字串。
示例 1:
輸入: “aba”
輸出: True
示例 2:
輸入: “abca”
輸出: True
解釋: 你可以刪除c字元。
注意:
字串只包含從 a-z 的小寫字母。字串的最大長度是50000。
題解 :
注意這裡是分別刪除一個字元 之後 再次判斷剩下的兩個是否能夠成迴文!
class Solution {
public boolean validPalindrome(String s) {
int low = 0;
int high = s.length() - 1 ;
while(low < high){
char c1 = s.charAt(low);
char c2 = s.charAt(high);
if(c1 == c2){
low++;
high--;
}else{
//預設刪除後的兩個都是迴文
boolean flag1 = true;
boolean flag2 = true ;
//這裡分別刪除頭尾兩個字元 判斷是否夠成迴文 這裡需要複製給一個新的指標 ij
for(int i = low + 1,j = high;i < j;i++,j--){
if(s.charAt(i) != s.charAt(j)){
flag1 = false;
break;
}
}
for (int i = low,j = high - 1;i < j;i++,j--){
//如果再次有不同的字元 就需要刪除一個字元後 還不是迴文了
if(s.charAt(i) != s.charAt(j)){
flag2 = false;
break;
}
}
return flag1 || flag2;
}
}
return true;
}
}