diff --git a/0125_valid-palindrome/README.md b/0125_valid-palindrome/README.md new file mode 100644 index 0000000..6bb6ceb --- /dev/null +++ b/0125_valid-palindrome/README.md @@ -0,0 +1,30 @@ +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. + +Given a string `s`, return `true` _if it is a **palindrome**, or_ `false` _otherwise_. + +**Example 1:** + + Input: s = "A man, a plan, a canal: Panama" + Output: true + Explanation: "amanaplanacanalpanama" is a palindrome. + + +**Example 2:** + + Input: s = "race a car" + Output: false + Explanation: "raceacar" is not a palindrome. + + +**Example 3:** + + Input: s = " " + Output: true + Explanation: s is an empty string "" after removing non-alphanumeric characters. + Since an empty string reads the same forward and backward, it is a palindrome. + + +**Constraints:** + +* `1 <= s.length <= 2 * 105` +* `s` consists only of printable ASCII characters. \ No newline at end of file diff --git a/0125_valid-palindrome/python3/solution.py b/0125_valid-palindrome/python3/solution.py new file mode 100644 index 0000000..d11854d --- /dev/null +++ b/0125_valid-palindrome/python3/solution.py @@ -0,0 +1,23 @@ +class Solution: + def isPalindrome(self, s: str) -> bool: + i = 0 + j = len(s) - 1 + + while i < j: + left = s[i].lower() + right = s[j].lower() + + if not left.isalnum(): + i += 1 + continue + elif not right.isalnum(): + j -= 1 + continue + + if left != right: + return False + + i += 1 + j -= 1 + + return True