题目:
给定一个非空字符串 s,请判断如果 最多 从字符串中删除一个字符能否得到一个回文字符串。
示例 1:
输入: s = "aba"
输出: true
示例 2:
输入: s = "abca"
输出: true
解释: 可以删除 "c" 字符 或者 "b" 字符
示例 3:
输入: s = "abc"
输出: false
提示:
1 <= s.length <= 105
s 由小写英文字母组成
代码:
package jianzhioffer;
public class offer_19 {
public static void main(String[] args) {
String s = "abca";
System.out.println(validPalindrome(s));
}
public static boolean validPalindrome(String s) {
int left = 0;
int right = s.length() - 1;
while (left <= right) {
if (s.charAt(left) != s.charAt(right)) {
//去掉左边一个字符串或者右边一个字符串,然后再判断是否是回文
return isPalindrome(left + 1, right, s) || isPalindrome(left, right - 1, s);
}
left++;
right--;
}
return true;
}
// 判断是否是回文
public static boolean isPalindrome(int left, int right, String s) {
while (left < right) {
if (s.charAt(left++) != s.charAt(right--)) {
return false;
}
}
return true;
}
}
解题思路:
在上道题的基础上深入了一点点,看代码即可。
注意:
在去掉字符的时候记得写成 left + 1 , right - 1, 不要写成 left ++, right -- 。