Problem
Given a string s
, return true
**if the *s
* can be palindrome after deleting at most one character from it**.
Example 1:
Input: s = "aba"
Output: true
Example 2:
Input: s = "abca"
Output: true
Explanation: You could delete the character 'c'.
Example 3:
Input: s = "abc"
Output: false
Constraints:
1 <= s.length <= 10^5
s
consists of lowercase English letters.
Solution (Java)
class Solution {
public boolean validPalindrome(String s) {
int l = 0;
int r = s.length() - 1;
while (l < r) {
if (s.charAt(l) != s.charAt(r)) {
return isPalindrome(s.substring(l + 1, r + 1)) || isPalindrome(s.substring(l, r));
}
l++;
r--;
}
return true;
}
private boolean isPalindrome(String s) {
int l = 0;
int r = s.length() - 1;
while (l < r) {
if (s.charAt(l) != s.charAt(r)) {
return false;
}
l++;
r--;
}
return true;
}
}
Explain:
nope.
Complexity:
- Time complexity : O(n).
- Space complexity : O(n).