680. Valid Palindrome II
Given a non-empty string s, you may delete at most one character. Judge whether you can make it a palindrome.
Example 1:
Input: "aba"
Output: True
Example 2:
Input: "abca"
Output: True
Explanation: You could delete the character 'c'.
Note:
- The string will only contain lowercase characters a-z. The maximum length of the string is 50000.
方法1: two pointer + recursion
Complexity
Time Complexity: O(N) where N is the length of the string. Each of two checks of whether some substring is a palindrome is O(N)
Space Complexity: O(1) additional complexity. Only pointers were stored in memory.
class Solution {
public:
bool validPalindrome(string s) {
int left = 0, right = s.size() - 1;
while (left < right) {
if (s[left] != s[right]) {
return isPalindrome(s, left + 1, right) || isPalindrome(s, left, right - 1);
}
else {
left ++;
right --;
}
}
return true;
}
bool isPalindrome(string s, int left, int right) {
while (left < right) {
if (s[left++] != s[right--]) return false;
}
return true;
}
};