难度简单336收藏分享切换为英文接收动态反馈
给定一个非空字符串
s
,最多删除一个字符。判断是否能成为回文字符串。示例 1:
输入: "aba" 输出: True示例 2:
输入: "abca" 输出: True 解释: 你可以删除c字符。注意:
- 字符串只包含从 a-z 的小写字母。字符串的最大长度是50000。
/**
吐了,一道简单题一晚上
时间复杂度O(n),空间复杂度O(1)
**/
class Solution {
public boolean validPalindrome(String s) {
int len=s.length();
int i=0,j=len-1;
while(i<j){
if(s.charAt(i)==s.charAt(j)){
i++;j--;
}else{
return isPalindrome(s,i+1,j)||isPalindrome(s,i,j-1);//非递归,只是做一次判断
}
}
return true;
}
public boolean isPalindrome(String s,int begin,int end){//判断子字符串是否回文
while(begin<end){
if(s.charAt(begin)==s.charAt(end)){
begin++;
end--;
}else{
return false;
}
}
return begin>=end;
}
}