LeetCode 680. Valid Palindrome II
考点 | 难度 |
---|---|
String | Easy |
题目
Given a string s
, return true if the s
can be palindrome after deleting at most one character from it.
思路
用两个pointer,一个从前面向后,另一个从后面向前。如果第一次遇到两个字母不同,isCharacterDeleted
改为true
,两个pointer中的任意一个向前移动1,另一个不动。如果第二次遇到不同字母,return false
。
答案
public boolean validPalindrome(String s) {
return isPalindrome(s, 0, s.length() - 1, false);
}
public boolean isPalindrome(final String s, int leftIndex, int rightIndex, final boolean isCharacterDeleted){
while(leftIndex < rightIndex){
if(s.charAt(leftIndex) != s.charAt(rightIndex)){
if(isCharacterDeleted){
return false;
}
return isPalindrome(s, leftIndex + 1, rightIndex, true) || isPalindrome(s, leftIndex, rightIndex - 1, true);
}
++leftIndex;
--rightIndex;
}
return true;
}