概要
依旧是双指针法,且最多删除一个字符是关键!
题目
给定一个非空字符串 s
,请判断如果 最多 从字符串中删除一个字符能否得到一个回文字符串。
思路
直接双指针从两端向中间遍历,比较两个字符是否一致。题干中的最多删除一个字符是个关键。如果我们遇到了字符不一致的情况,那我们是删左指针还是右指针的字符呢?两个都尝试一下,看删除两个指针后形成的子字符串是否为回文字符串。如果都不是,则说明最多删除一个字符是无法实现的。
解法:双指针+一次判断子字符串是否为回文
代码
public boolean validPalindrome(String s) {
int left = 0;
int right = s.length() - 1;
while (left < right) {
if (s.charAt(left) != s.charAt(right)) {
return isPalindrome(s.substring(left + 1, right + 1))
|| isPalindrome(s.substring(left, right));
}
left++;
right--;
}
return true;
}
public boolean isPalindrome(String s) {
for (int i = 0; i <= s.length() / 2 - 1; i++) {
if (s.charAt(i) != s.charAt(s.length() - i - 1)) {
return false;
}
}
return true;
}