Palindromic Series
Leetcode 5. Longest Palindromic Substring
Given a string s, find the longest palindromic substring in s. You may assume that the maximum length of s is 1000.
Example:
Input: “babad”
Output: “bab”
Input: “cbbd”
Output: “bb”
class Solution {
public:
    string longestPalindrome(string s) {
        const int n = s.size();
        if (n<2)    return s;
        int i = 1;
        int res = 0, begin = 0;
        for (int i=0; i<n; i++) {
            int j = i;
            while (j<n && s[j]==s[j+1]) j++;
            int left = i, right = j;
            while (left>=0 && right<n && s[left] == s[right]) {
                left--;
                right++;
            }
            if (right-left-1 > res) {
                res = right - left -1;
                begin = left+1;
            }
        }
        return s.substr(begin, res);
    }
};
Leetcode 125. Valid Palindrome
Given a string, determine if it is a palindrome, considering only alphanumeric characters and ignoring cases.
For example,
“A man, a plan, a canal: Panama” is a palindrome.
“race a car” is not a palindrome.
Note:
Have you consider that the string might be empty? This is a good question to ask during an interview.
For the purpose of this problem, we define empty string as valid palindrome.
class Solution {
public:
    bool isPalindrome(string s) {
        if (s.empty())  return true;
        int left=0, right = s.size()-1;
        while (left<right) {
            while (left<right && !isalnum(s[left]))   left++;
            while (left<right && !isalnum(s[right]))  right--;
            if (left>=right)    break;
            if (tolower(s[left]) != tolower(s[right]))  return false;
            else {
                left++;
                right--;
            }
        }
        return true;
    }
};