1)题目:
给定一个非空字符串 s,最多删除一个字符。判断是否能成为回文字符串。
示例 1:
输入: s = "aba"
输出: true
示例 2:输入: s = "abca"
输出: true
解释: 你可以删除c字符。
示例 3:输入: s = "abc"
输出: false提示:
1 <= s.length <= 105
s 由小写英文字母组成
2)代码:
这题看起来简单,写起来是真的…………吐血
class Solution {
public boolean validPalindrome(String s) {
char b[]=s.toCharArray();
int l=0,r=s.length()-1;
//之所以分开,是为了保证只存在一次删除。
while(l<r){
if(b[l]!=b[r]){
return doing(b,l,r-1)||doing(b,l+1,r);
}
l++;
r--;
}
return true;
}
private boolean doing(char s[],int l,int r){
//已经存在一次不匹配,再次出现一定不满足题意。
while(l<r){
if(s[l]!=s[r]){
return false;
}
l++;
r--;
}
return true;
}
}
3)运行结果: