1. 具体题目
给定一个非空字符串 s,最多删除一个字符。判断是否能成为回文字符串。
示例 1: 输入: "aba" 输出: True
示例 2: 输入: "abca" 输出: True 解释: 你可以删除c字符。
2. 思路分析
若单纯判断一个回文字符串,只需要设置前后指针同时向中间逼近,比较前后指针所指元素的值即可。而本题要求可以删除一个字符,可以考虑在迭代前后指针时,若遇到不一样的值,比较 [left+1, right](跳过当前left) 和 [left, right-1](跳过当前right)所指的子字符串是否是回文字符串,若有一个子串满足回文要求,则可返回true,否则返回false。
3. 代码
1 public boolean validPalindrome(String s) { 2 int left = 0, right = s.length() - 1; 3 while(left < right){ 4 if(s.charAt(left) != s.charAt(right)){ 5 return isValid(s, left+1, right) || isValid(s, left, right-1); 6 } 7 left++; 8 right--; 9 } 10 return true; 11 } 12 private boolean isValid(String s, int left, int right){ 13 while(left < right){ 14 if(s.charAt(left) != s.charAt(right)){ 15 return false; 16 } 17 left++; 18 right--; 19 } 20 return true; 21 }
原文:https://www.cnblogs.com/XRH2019/p/11938494.html