原题
给定一个非空字符串 s
,最多删除一个字符。判断是否能成为回文字符串。
示例 1:
输入: "aba"
输出: True
示例 2:
输入: "abca"
输出: True
解释: 你可以删除c字符。
注意:
- 字符串只包含从 a-z 的小写字母。字符串的最大长度是50000。
解法
思想
双指针,当遇到左右两个字符不等的时候,删除左边的,再继续判断是否相等,或删除右边的,再继续判断是否相等。
代码
class Solution {
public boolean validPalindrome(String s) {
int p1 = 0,p2 = s.length()-1;
while(p1<=p2){
if(s.charAt(p1)!= s.charAt(p2)){
String reverse = new StringBuilder(s).reverse().toString();
return s.substring(p1+1,p2+1).equals(reverse.substring(p1,p2)) || s.substring(p1,p2).equals(reverse.substring(p1+1,p2+1));
}
p1++;p2--;
}
return true;
}
}
原创文章,作者:彭晨涛,如若转载,请注明出处:https://www.codetool.top/article/leetcode680-%e9%aa%8c%e8%af%81%e5%9b%9e%e6%96%87%e5%ad%97%e7%ac%a6%e4%b8%b2ii/