LeetCode - 680. Valid Palindrome II(刪除一個字元判斷能否構成迴文)
阿新 • • 發佈:2019-01-13
LeetCode - 680. Valid Palindrome II(刪除一個字元判斷能否構成迴文)
題目連結
題目
就是給你一個字串,問你是否能刪除最多一個字元(可以不用刪除) ,得到一個迴文串。
解析
暴力列舉刪除每一個位置的方法肯定是行不通的。
這裡需要用到迴文串的性質。
看下面兩個例子:
案例一: e a d c b c a e
另一種情況:
e a b f f b e a e
所以解題步驟:
設定兩個指標,往中間靠攏,然後當遇到s[L] != s[R]
的時候,就判斷[L + 1, R]
或者[L, R-1]
部分可以不可以構成迴文串,只要有其中一個可以,就返回true
class Solution {
public boolean validPalindrome(String s) {
int L = 0, R = s.length() - 1;
while(L < R){
if(s.charAt(L) != s.charAt(R)){
return isPalindrome(s, L+1, R) || isPalindrome(s, L, R-1);
}else {
L++;
R-- ;
}
}
return true;
}
private boolean isPalindrome(String s, int L, int R){
while(L < R)
if(s.charAt(L++) != s.charAt(R--))
return false;
return true;
}
}