LeetCode-680. 驗證迴文字符串
給定一個非空字符串 s,最多刪除一個字符。判斷是否能成爲迴文字符串。
示例 1:
輸入: "aba"
輸出: True
示例 2:
輸入: "abca"
輸出: True
解釋: 你可以刪除c字符。
思路
首先,驗證迴文字符串使用的是雙指針的思路。頭尾指針指向的字符是否相同,如果到相遇之前都相同,那麼說明是迴文的。
如何驗證刪除之後是迴文字符串呢?還是雙指針,不過要加一個判斷,當首尾兩個字符不相等的時候,需要比較頭指針後面一個字符到尾指針是否迴文,同理,還要比較尾指針前面一個字符是否與頭指針迴文。取或。
class Solution {
public boolean validPalindrome(String s) {
if(s.length()==0) return false;
int l=0;
int r=s.length()-1;
while(l<r)
{
if(s.charAt(l++)!=s.charAt(r--))
{
//這裏下標容易搞錯,要把++和--的退回去。實際是按照思路來的。
return valid(s,l,r+1) || valid(s,l-1,r);
}
}
return true;
}
public boolean valid(String s,int l,int r)
{
while(l<r)
{
if(s.charAt(l++)!=s.charAt(r--)) return false;
}
return true;
}
}