1,题目
2,思路
- 首先就是判断它不发生改变会不会是回文
- 如果不是回文,那么俩个指针从前往后与从后往前做对比
- 如果俩字符不同,那就俩种选择,一种是保留前面的字符去掉后面字符,另一种是其反
- 然后俩种选择只要满足一种则return true否则break
3,代码
public class Leetcode680 {
public static void main(String[] args) {
System.out.println(new Solution680().validPalindrome("eceec"));
}
}
class Solution680 {
public boolean validPalindrome(String s) {
if (s.equals(new StringBuffer(s).reverse().toString())) {//正常反转判断字符串是否回文
return true;
}
int num = 1;
char[] arr = s.toCharArray();
for (int i = 0, j = arr.length - 1; i < arr.length; i++, j--) {
if (arr[i] != arr[j] && num > 0) {
num--;
if (fun(new StringBuffer(s), i) || fun(new StringBuffer(s), j)) {
return true;
} else {
break;
}
}
}
return false;
}
public boolean fun(StringBuffer s, int i) {
StringBuffer sb = new StringBuffer();
sb.append(s.substring(0, i));
sb.append(s.substring(i + 1, s.length()));
String sb2 = sb.reverse().toString();
sb.reverse();
if (sb.toString().equals(sb2)) return true;
else return false;
}
}