题意描述
给定一个非空字符串 s,最多删除一个字符。判断是否能成为回文字符串。
示例 1:
输入: "aba" 输出: True 示例 2:
输入: "abca" 输出: True 解释: 你可以删除c字符。 注意:
字符串只包含从 a-z 的小写字母。字符串的最大长度是50000。
解题思路:
前后字符比较,直到字符串中间位置
1)若一直没有碰到前后字符不相等的情况,则字符串本身就是回文串
2)碰到前后字符不相等的情况,去掉前一个字符或者去掉后一个字符,判断是否是回文串
class Solution {
public boolean validPalindrome(String s) {
if (s == null || s.isEmpty()) {
return true;
}
int len = s.length();
for (int i = 0; i < len/2; i++) {
if (s.charAt(i) != s.charAt(len-i-1)) {
if (isValid(s, i, len-i-2)) {
return true;
} else if (isValid(s, i+1, len-i-1)) {
return true;
} else {
return false;
}
}
}
return true;
}
private boolean isValid(String s, int start, int end) {
while (start <= end) {
if (s.charAt(start++) == s.charAt(end--)) {
continue;
} else {
return false;
}
}
return true;
}
}