1.先验证是否本身就是回文字符串,无非两种情况一种奇数位,如12321;一种偶数位,如123321.
2,一个从前往后走,一个从后往前走,相遇或者刚好错过时结束,可判结。对于回文类型,要么两个下标相同 i==j,即奇数位情况;要么刚好错过, i==j+1。
3.当中途遇到前后两个字符不相同时,跳过该字符,那么该字符串是回文也就无非两种情况:
要么后面没有字符了,即12347321在4和7不同时删掉4后就是回文字符串了,要么跳过4之后还要继续判断直至结束,如12345678765321,在4和5不同时删掉4之后继续比较会看出是回文。
#include<stdbool.h>
bool palindrome(char* str ) {
    int n = strlen(str)-1;  //n是最大下标
    int i = 0;
    while(str[i] == str[n] && i < n){
        i++;
        n--;
    }
    if(i == n || i== n + 1)
        return true;  //奇数位回文或者偶数位回文结束时
    i++;  //跳过不相等的这个字符,没必要真的删除,只是比较和验证而已
    if(i == n)
        return true;  //后面没有字符的情况就是回文
    else{
        while(str[i] == str[n] && i < n){  //继续比较
            i++, n--;
        }
        if(i == n || i == n + 1)
            return true;
        else
            return false;
    }
}