难度简单438
给定一个非空字符串 s
,最多删除一个字符。判断是否能成为回文字符串。
示例 1:
输入: s = "aba" 输出: true
示例 2:
输入: s = "abca" 输出: true 解释: 你可以删除c字符。
示例 3:
输入: s = "abc" 输出: false
代码:
class Solution {
public boolean validPalindrome(String s) {
char[] arr = s.toCharArray();
int low = 0;
int high = arr.length-1;
if(arr.length==1){
return true;
}
while(low<high){
char c1 = s.charAt(low);
char c2 = s.charAt(high);
if(c1==c2){
++low;
--high;
}
else return ValidPalindrome(s,low+1,high)||ValidPalindrome(s,low,high-1);
}
return true;
}
public boolean ValidPalindrome(String s,int low,int high){
for(int i = low,j = high;i<j;++i,--j){
char c1 = s.charAt(i);
char c2 = s.charAt(j);
if(c1!=c2){
return false;
}
}
return true;
}
}
结果:
总结:一开始思路错了,老想着直接在一个for里面写好多分支来解决奇怪案例的问题,后面发现还是要用贪心算法,而且要分割为两个子串(这一步在前面没想到)。搞明白后就感觉还行。