Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit fc2bfdc

Browse files
125. Valid Palindrome
1 parent b1fd1e4 commit fc2bfdc

File tree

1 file changed

+86
-0
lines changed

1 file changed

+86
-0
lines changed

‎TwoPointers/125_Valid_Palindrome.py‎

Lines changed: 86 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,86 @@
1+
'''
2+
125. Valid Palindrome
3+
Given a string s, determine if it is a palindrome, considering only alphanumeric characters and ignoring cases.
4+
A phrase is a palindrome if, after converting all uppercase letters into lowercase letters and removing all non-alphanumeric characters, it reads the same forward and backward. Alphanumeric characters include letters and numbers.
5+
6+
Example 1:
7+
Input: s = "A man, a plan, a canal: Panama"
8+
Output: true
9+
Explanation: "amanaplanacanalpanama" is a palindrome.
10+
11+
Example 2:
12+
Input: s = "race a car"
13+
Output: false
14+
Explanation: "raceacar" is not a palindrome.
15+
'''
16+
17+
# Brute Force
18+
# Time Complexity: O(n)
19+
# Space Complexity: O(n)
20+
21+
'''
22+
Below is the code for the brute force approach.
23+
It uses the built-in string methods to clean the input string and check if it is a palindrome.
24+
'''
25+
26+
class Solution:
27+
def isPalindrome(self, s):
28+
clean = ''.join(c for c in s if c.isalnum()).lower()
29+
return clean == clean[::-1]
30+
31+
# Two Pointers
32+
# Time Complexity: O(n)
33+
# Space Complexity: O(n)
34+
35+
'''
36+
Below is the code for the two pointers approach.
37+
It uses two pointers to check if the cleaned string is a palindrome.
38+
The two pointers start at the beginning and end of the string and move towards the center, comparing characters along the way.
39+
If any characters don't match, it returns False. If all characters match, it returns True.
40+
'''
41+
42+
class Solution:
43+
def isPalindrome(self, s):
44+
clean = ''.join(c for c in s if c.isalnum()).lower()
45+
i=0
46+
j=len(clean)-1
47+
48+
while i<=j:
49+
if clean[i]!=clean[j]:
50+
return False
51+
else:
52+
i+=1
53+
j-=1
54+
return True
55+
56+
# Two Pointers (Optimized)
57+
# Time Complexity: O(n)
58+
# Space Complexity: O(1)
59+
60+
'''
61+
This approach uses the two-pointer technique to efficiently check if a string is a palindrome
62+
while ignoring non-alphanumeric characters and treating uppercase and lowercase letters as the same
63+
'''
64+
65+
class Solution:
66+
def isPalindrome(self, s):
67+
i=0
68+
j=len(s)-1
69+
70+
while i<j:
71+
while i<j and not s[i].isalnum():
72+
i+=1
73+
while i<j and not s[j].isalnum():
74+
j-=1
75+
76+
if s[i].lower()!=s[j].lower():
77+
return False
78+
79+
i+=1
80+
j-=1
81+
return True
82+
83+
sol = Solution()
84+
s = "Was it a car or a cat I saw?"
85+
print(sol.isPalindrome(s))
86+
# Output: True

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /