File tree Expand file tree Collapse file tree 1 file changed +59
-0
lines changed Expand file tree Collapse file tree 1 file changed +59
-0
lines changed Original file line number Diff line number Diff line change 1+ # FIRST WEEK
2+
3+ # Question : 125. Valid Palindrome
4+
5+ # A phrase is a palindrome if, after converting all uppercase letters into lowercase letters and
6+ # removing all non-alphanumeric characters, it reads the same forward and backward.
7+ # Alphanumeric characters include letters and numbers.
8+ # Given a string s, return true if it is a palindrome, or false otherwise.
9+
10+ # Example 1:
11+ # Input: s = "A man, a plan, a canal: Panama"
12+ # Output: true
13+ # Explanation: "amanaplanacanalpanama" is a palindrome.
14+
15+ # Example 2:
16+ # Input: s = "race a car"
17+ # Output: false
18+ # Explanation: "raceacar" is not a palindrome.
19+
20+ # Example 3:
21+ # Input: s = " "
22+ # Output: true
23+ # Explanation: s is an empty string "" after removing non-alphanumeric characters.
24+ # Since an empty string reads the same forward and backward, it is a palindrome.
25+
26+ # Constraints:
27+ # 1 <= s.length <= 2 * 105
28+ # s consists only of printable ASCII characters.
29+
30+ # Notes:
31+ # Using `reverse`(O(N)) api and matching all(max O(N)) look straightforward.
32+ # The two pointer method may useful to decrease time complexity.
33+ # If length of input is 0 or 1, return true.
34+
35+ class Solution :
36+ def isPalindrome (self , s : str ) -> bool :
37+ l = len (s )
38+ if l < 2 :
39+ return True
40+
41+ f = 0
42+ b = l - 1
43+
44+ while (f <= b ):
45+ if (s [f ] == " " or (s [f ].isalpha () == False and s [f ].isnumeric () == False )):
46+ f = f + 1
47+ continue
48+
49+ if (s [b ] == " " or (s [b ].isalpha () == False and s [b ].isnumeric () == False )):
50+ b = b - 1
51+ continue
52+
53+ if s [f ].lower () != s [b ].lower ():
54+ return False
55+
56+ f = f + 1
57+ b = b - 1
58+
59+ return True
You can’t perform that action at this time.
0 commit comments