HiveBrain v1.2.0
Get Started
← Back to all entries
patternpythonMinor

Valid palindrome solution

Submitted by: @import:stackexchange-codereview··
0
Viewed 0 times
palindromesolutionvalid

Problem

I'm working on this valid palindrome problem. Any advice on code bug, better idea for low algorithm execution time complexity, code style, etc. are highly appreciated.


Problem


Given a string, determine if it is a palindrome, considering only
alphanumeric characters and ignoring cases.


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.

Source Code

def check_valid(source):
    i = 0
    j = len(source)-1
    source =source.lower()
    while i  j:
            return True

if __name__ == "__main__":
    print check_valid('A man, a plan, a canal: Panama') # return True
    print check_valid('race a car') # return False

Solution

Some small nitpicks:

  • Instead of i



  • Here: ('a'



  • It seems like you always forget to put a space between operators: i+=1 should be i += 1.



  • Add docstrings to your function



Reviewed code:

def check_valid(source):
    """ Return True/False if a string is a palindrome """

    i, j, source = 0, len(source) - 1, source.lower()
    while i  j:
            return True

if __name__ == "__main__":
    print check_valid('A man, a plan, a canal: Panama')  # return True
    print check_valid('race a car')  # return False

Code Snippets

def check_valid(source):
    """ Return True/False if a string is a palindrome """

    i, j, source = 0, len(source) - 1, source.lower()
    while i <= j:
        while i < j and not source[i].isalnum():
            i += 1
        while i < j and not source[j].isalnum():
            j -= 1
        if i <= j:
            if source[i] != source[j]:
                return False
            else:
                i += 1
                j -= 1
        if i > j:
            return True


if __name__ == "__main__":
    print check_valid('A man, a plan, a canal: Panama')  # return True
    print check_valid('race a car')  # return False

Context

StackExchange Code Review Q#149835, answer score: 4

Revisions (0)

No revisions yet.