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:
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 True
if __name__ == "__main__":
print check_valid('A man, a plan, a canal: Panama') # return True
print check_valid('race a car') # return False