题目要求:
代码实现:
bool validPalindrome(char* left, char* right){ //一次判断某字符串(或者片段)是否为回文字符串
while(left < right){
if(*left != *right){
return false;
}
left++;
right--;
}
return true;
}
bool palindrome(char* str ) { //入口:从头判断字符串是否回文
int len = strlen(str);
if(len == 1) return true;
char* p = str;
char* q = str + len - 1;
while(p < q)
{
if(*p != *q){ //注意:不相等的时候要么删除左侧字符,要么删除右侧字符
return validPalindrome(p+1, q) || validPalindrome(p, q-1); //此处只调用一次就返回结果
}
p++;
q--;
}
return true;
}
重难点:
1、第一次判断到不是回文数的时候,要清楚:既可以删除左指针指向的字符,又可以删除右指针指向的字符
2、将判断回文字符串的代码再单独封装一次,这样方便两次调用并使用“ 逻辑或 ”的关系,此处调用的时候,就会判断剩余的字符串是否为回文数,是的话,整个字符串就是回文数;不是的话,说明删除一个字符后依然不是回文字符串