125. Valid Palindrome

https://leetcode.com/problems/valid-palindrome/#/description

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.

Hint:

Check if the left char is equal to the right char. Quite straight forward.

Sol 1:

def isPalindrome(self, s):
    l, r = 0, len(s)-1
    while l < r:
        while l < r and not s[l].isalnum():
            l += 1
        while l <r and not s[r].isalnum():
            r -= 1
        if s[l].lower() != s[r].lower():
            return False
        l +=1; r -= 1
    return True

Note:

1 Remove the capital letters and other punctuations before comparing. Here are some handy functions.

1) isalnum()

Return true when the string has at least one char and the string is composed of letters and numbers.

ex1.

s = "A man, a plan, a canal: Panama"
print s.isalnum()

==> False

ex2.

s = "AmanplanacanalPanama"
print s.isalnum()

==> True

 

ex3.

s = "A man, a plan, a canal: Panama"
print s[0].isalnum()

==> True

ex4.

s = "A man, a plan, a canal: Panama"
print s[1].isalnum()

==> False

2) s1 = s1.replace(‘ ‘,‘‘).lower()

Remove spaces and lowercase letters. 

In this case, merely remove spaces and lowercase letters are not enough, because chars like " : " can be included, and it will jeopardize the reversed string.   

2 Pay attention to the programming style of loops. While loop is used with the iterate condition like left +=1 or right -= 1. While loop is not for loop, so do not expect the pointer to add value itself. 

3 In order to aviod "Line 11: IndexError: string index out of range", even if the while left < right condition is written in the outer loop, it is suggested to write it again in the inner loop. 

4 Use != condition.  If the aim is like "break the loop(or return False) when.... and check the rest ". Use != condition.  

Pseudocode:

if the condition is not satisfied:

    return False

pointer += 1

Only in this way can we make sure the pointer traverses the string. 

Similar question, if the input string only contains  letters, numbers, or spaces.  i.e. No “ , ”  “ : ” ...

We can use the following python trick. 

def solution2(s):
    s= s.replace(" ","").lower()
    return str(s) == str(s)[::-1]

s = "am an apl anac analpanama"
solution2(s)

==> True

Note:

1 s[::-1] prints string s in a reverse manner.  

时间: 2024-10-21 00:38:01

125. Valid Palindrome的相关文章

125. Valid Palindrome【easy】

125. Valid Palindrome[easy] 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. No

leetCode 125. Valid Palindrome 字符串

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:Hav

125. Valid Palindrome(js)

125. Valid Palindrome Given a string, determine if it is a palindrome, considering only alphanumeric characters and ignoring cases. Note: For the purpose of this problem, we define empty string as valid palindrome. Example 1: Input: "A man, a plan, a

Java [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 t

125. Valid Palindrome【双指针】

2017/3/15 21:47:04 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 y

[leedcode 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 th

125. Valid Palindrome (Array; Two-Pointers)

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

【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 th

leetcode 125. Valid Palindrome ----- java

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 th