题目描述: 给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。
说明:本题中,我们将空字符串定义为有效的回文串。
难度:简单
思路:
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); 可以利用正则表达式输入空格。