125. 验证回文串

题目描述: 给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。

说明:本题中,我们将空字符串定义为有效的回文串。

难度:简单

思路:
1.利用两个指针指向原串首尾,匹配查找
2.用数组存有用的信息,进行操作。这样最快,但是要耗费空间

用数组:

int len_str(char *str) {
    int len = 0;
    while (str[len] != 0) len += 1;
    return len;
}

void read_case(char *str, char *arr) {
    int len = len_str(str), len_zero = 0;
    int i = 0;
    while (len > len_zero) {
        if (str[len_zero] >= 'a' && str[len_zero] <= 'z' || str[len_zero] >= 'A' && str[len_zero] <= 'Z' || str[len_zero] >= '0' && str[len_zero] <= '9') {
            if (str[len_zero] >= 'A' && str[len_zero] <= 'Z') {
                arr[i++] = str[len_zero] + 32;
            } else 
                arr[i++] = str[len_zero];
        }
        len_zero += 1;
    }
    arr[i] = 0;
    return ;
}

int nsakpter(char *str) {
    int left = 0, right = len_str(str) - 1;
    while (left <= right) {
        if (str[left] != str[right]) return false;
        else {
            left += 1;
            right -= 1;
        }
    }
    return true;
}

char arr[100000];

bool isPalindrome(char* s) {
    read_case(s, arr);
    return nsakpter(arr);
}

注意别忘了空的字符串也是有效的,处理的字符中数字也算。

scanf("%[^\n]s",a); 可以利用正则表达式输入空格。

你可能感兴趣的:(125. 验证回文串)