125. Valid Palindrome
对比LeetCode 20. Valid Parentheses
/**************************************************************************
*
* 125. [Valid Palindrome](https://leetcode.com/problems/valid-palindrome/)
*
* Given a string s, determine if it is a palindrome, considering only alphanumeric characters and ignoring cases.
* Example 1:
* Input: s = "A man, a plan, a canal: Panama"
* Output: true
* Explanation: "amanaplanacanalpanama" is a palindrome.
*
* Example 2:
* Input: s = "race a car"
* Output: false
* Explanation: "raceacar" is not a palindrome.
*
**************************************************************************/
// C 库函数 int isalnum(int c) 检查所传的字符是否是字母和数字。
// C 库函数 int tolower(int c) 把给定的字母转换为小写字母。
// int toupper(int c);
// isalpha Check if character is alphabetic (function )
// isdigit Check if character is decimal digit (function )
// isblank islower isupper
bool isPalindrome(char * s){
int len = strlen(s);
if (len < 1) return false;
if (len == 1 && isalnum(s[0])) return true;
int front = 0;
int back = len - 1;
while (front < back) {
while (!isalnum(s[front]) && front < back) front++;
while (!isalnum(s[back]) && front < back) back--;
if (isupper(s[front])) s[front] += 32;
if (isupper(s[back])) s[back] += 32;
if (s[front] != s[back])
return false;
front++;
back--;
}
return true;
}