LeetCode680.驗證會問字符串Ⅱ
問題
分析
這個題目就是對於迴文串的條件進行了放寬,允許刪除一個元素,這樣會導致字符之間的對應關係發生變化,相對簡單的方法就是定義兩個指針,分別從頭部或者尾部進行遍歷,直到兩者匯合,如果發生不相等的情況,無非就是兩種,要麼刪除頭部的要麼刪除尾部的,最後只要有一個能形成一個迴文串即可。
代碼實現
public boolean validPalindrome(String s) {
int low=0;
int higth=s.length()-1;
while (low<higth){
char c1=s.charAt(low),c2=s.charAt(higth);
if(c1==c2){
low++;
higth--;
}else {
// 需要進行刪除
boolean flagz=true,flagy=true;
// 刪左邊
int i=low+1,j=higth;
while (i<j){
char c3=s.charAt(i),c4=s.charAt(j);
if(c3!=c4){
flagz=false;
break;
}
i++;
j--;
}
// 刪右邊
i=low;
j=higth-1;
while (i<j){
char c3=s.charAt(i),c4=s.charAt(j);
if(c3!=c4){
flagy=false;
break;
}
i++;
j--;
}
return flagy||flagz;
}
}
return true;
}
}
}
return true;
}