题目描述
给定一个非空字符串 s,最多删除一个字符。判断是否能成为回文字符串。
示例:
输入: “abca”
输出: True
解释: 你可以删除c字符。
注意:字符串只包含从 a-z 的小写字母。字符串的最大长度是50000。
解题心得
这道题依旧是双指针类型题目,即前后双指针依次判断,但此题关键在于删除哪一个字符的问题,如果扫描中第一次碰到不相等状况,判断删除左边还是右边的字符是个问题,但若想仅凭再检测一个字符解决显然不成立,因此需要分别对两种情况做出判断。
代码如下:
bool judge(char *s, int min, int max){
while(min<max){
if(s[min]==s[max]){
min++;
max--;
}
else return 0;
}
return 1;
}
bool validPalindrome(char * s){
int min = 0, max = strlen(s)-1 ;
while(min<max){
if(s[min]!=s[max]){
return judge(s,min+1,max) || judge(s,min,max-1);
}
else{
min++;
max--;
}
}
return 1;
}