给定一个非空字符串 s
,最多删除一个字符。判断是否能成为回文字符串。
示例 1:
输入: "aba"
输出: True
示例 2:
输入: "abca"
输出: True
解释: 你可以删除c字符。
思路:
1.该问题可以拆解成两个问题:判断回文和删除多余的一个字符
2.判断回文最简单的方式就是双指针,通过左右指针比对
3.删除多余的一个字符,无非是出现左右指针出现不同时,删左还是删右
代码如下
public boolean validPalindrome(String s) {
char[] sc=s.toCharArray();
int i=0,j=sc.length-1;
for(;i<j&&sc[i]==sc[j];i++,j--);
return isPalindrome(sc,i+1,j)||isPalindrome(sc,i,j-1);
}
//判断回文
private boolean isPalindrome(char[] s,int i,int j){
for(;i<j&&s[i]==s[j];i++,j--);
return i>=j;
}
同类问题:
125. 验证回文串leetcode-cn.com