思路:
创建首尾指针i,j,向中间移动比较,出现第一次不同字符时:
舍弃i指向的字符,比较(i+1,j);
舍弃j指向的字符,比较(i,j-1);
以上两种情况,只要其中一种满足要求即可。
代码1:
bool validPalindrome(char * s){
bool flag1 = true, flag2 = true;
int low = 0, high = strlen(s) - 1;
while(low<high){
if(s[low] != s[high]){
for(int i = low, j = high - 1; i<j ; i++, j--){
if(s[i] != s[j]){
flag1 = false;
break;
}
}
for(int i = low + 1, j = high; i<j; i++, j--){
if(s[i] != s[j]){
flag2 = false;
break;
}
}
}
low++;
high--;
}
return (flag1 || flag2);
}
代码2:
bool validPalindrome(char * s){
for (int i = 0, j = strlen(s)-1; i < j; ++i, --j)
if (s[i] != s[j])
return (judge(s, i+1,j) || judge(s, i,j-1));
return true;
}
int judge(char *str, int i, int j) {
while (i < j) if (str[i++] != str[j--]) return false;
return true;
}
代码1运行超时,代码2通过,二者有何区别呢???