Skip to content

Latest commit

 

History

History
89 lines (67 loc) · 1.82 KB

20220816.md

File metadata and controls

89 lines (67 loc) · 1.82 KB

Algorithm

125. Valid Palindrome

Description

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:

  • 1 <= s.length <= 2 * 105
  • s consists only of printable ASCII characters.

Solution

class Solution {
    public boolean isPalindrome(String s) {
        if(s==null||s.isEmpty()){
            return true;
        }
        int i = 0;
        int j = s.length()-1;
        while(i<=j){
            while(i<j&&!isNumAlphanumeric(s.charAt(i))){
                i++;
            }
            while((i<j)&&(!isNumAlphanumeric(s.charAt(j)))) {
                j--;
            }
            if (toLower(s.charAt(i++)) != toLower(s.charAt(j--))) {
                return false;
            }
        }
        return true;
    }

    public char toLower(char c){
       if('A'<=c&&c<='Z'){
           return (char)('a'+c-'A');
       }
       return c;
    }
    public boolean isNumAlphanumeric(char c){
        if(('0'<=c&&c<='9')||('a'<=c&&c<='z')||('A'<=c&&c<='Z')) {
            return true;
        }
        return false;
    }
}

Discuss

Review

Tip

Share