验证回文字符串 Ⅱ——leetcode680
验证回文字符串 Ⅱ
题目:验证回文字符串 Ⅱ
给定一个非空字符串 s
,最多删除一个字符。判断是否能成为回文字符串。
示例 :
输入: s = "abca"
输出: true
解释: 你可以删除c字符。
题解
方法一:贪心
class Solution {
public boolean validPalindrome(String s) {
int l = s.length();
char cs[] = s.toCharArray();
boolean flag = true;
boolean res = true;
for (int i = 0, j = l - 1; i <= j; i++, j--) {
if (cs[i] != cs[j]) {
if (flag) {
j++;
flag = false;
} else {
res=false;
break;
}
}
}
if(!res) {
res=true; flag=true;
for (int i = 0, j = l - 1; i <= j; i++, j--) {
if (cs[i] != cs[j]) {
if (flag) {
i--;
flag = false;
} else {
res=false;
break;
}
}
}
}
return res;
}
}
方法二:贪心+递归
class Solution2 {
public boolean validPalindrome(String s) {
int l = s.length();
char cs[] = s.toCharArray();
int i=0,j=l-1;
while (i<=j) {
if(cs[i]!=cs[j]) {
break;
}
i++;
j--;
}
if(i>=j) return true;
return isPalindrome(cs, i+1, j) || isPalindrome(cs, i, j-1);
}
public boolean isPalindrome(char[] cs, int i, int j) {
while (i<j) {
if(cs[i]!=cs[j])
return false;
i++;
j--;
}
return true;
}
}