LeetCode in Net

125. Valid Palindrome

Easy

A phrase is a palindrome if, after converting all uppercase letters into lowercase letters and removing all non-alphanumeric characters, it reads the same forward and backward. Alphanumeric characters include letters and numbers.

Given a string s, return true if it is a palindrome, or false otherwise.

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.

Example 3:

Input: s = “ “

Output: true

Explanation: s is an empty string “” after removing non-alphanumeric characters. Since an empty string reads the same forward and backward, it is a palindrome.

Constraints:

Solution

public class Solution {
    public bool IsPalindrome(string s) {
        int i = 0;
        int j = s.Length - 1;
        bool res = true;
        while (res) {
            while (i < j && IsNotAlphaNumeric(s[i])) {
                i++;
            }
            while (i < j && IsNotAlphaNumeric(s[j])) {
                j--;
            }
            if (i >= j) {
                break;
            }
            char left = UpperToLower(s[i]);
            char right = UpperToLower(s[j]);
            if (left != right) {
                res = false;
            }
            i++;
            j--;
        }
        return res;
    }

    private bool IsNotAlphaNumeric(char c) {
        return (c < 'a' || c > 'z') && (c < 'A' || c > 'Z') && (c < '0' || c > '9');
    }

    private bool IsUpper(char c) {
        return c >= 'A' && c <= 'Z';
    }

    private char UpperToLower(char c) {
        if (IsUpper(c)) {
            c = (char)(c + 32);
        }
        return c;
    }
}