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.ProblemGiven a string, determine if it is a palindrome, considering only  alphanumeric characters and ignoring cases.ExampleA man, a plan, a canal: Panama is a palindrome. race a car is not  a palindrome.NoteHave 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 Codedef check_valid(source):    i = 0    j = len(source)-1    source =source.lower()    while i <= j:        while i<=j and not ('a'<=source[i]<='z'):            i+=1        while i<=j and not ('a'<=source[j]<='z'):            j-=1        if i<=j:            if source[i] != source[j]:                return False            else:                i+=1                j-=1        if i > j:            return Trueif __name__ == __main__:    print check_valid('A man, a plan, a canal: Panama') # return True    print check_valid('race a car') # return False
Valid palindrome solution
python;algorithm;python 2.7;palindrome
Some small nitpicks:Instead of i <= j you can stop before j by doing: i < j in the last two while loops. That way, you'll save one iteration per while. If you weren't constraint by: For the purpose of this problem, we define empty string as valid palindrome you might've remove that as wellHere: ('a'<=source[i]<='z') you can remove the redundant parentheses and also write it like: source[i].isalnum()It seems like you always forget to put a space between operators: i+=1 should be i += 1.Add docstrings to your functionReviewed 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:        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 Trueif __name__ == __main__:    print check_valid('A man, a plan, a canal: Panama')  # return True    print check_valid('race a car')  # return False