Given a string, determine if it is a palindrome.
A palindrome is a word, number, phrase, or other sequence of characters which reads the same backward as forward
Example 1:
Input: "madam racecar madam" Output: true
Example 2:
Input: "abcbx" Output: false
Your algorithm should run in O(n) time and use O(1) extra space.
The problem requires us to determine if a given string is a palindrome. A palindrome is a sequence of characters that reads the same backward as forward.
Input: A string s
.
Output: A boolean value true
if the string is a palindrome, otherwise false
.
Constraints:
Example:
Input: "madam racecar madam" Output: true
Input: "abcbx" Output: false
The core challenge is to check if the string reads the same backward as forward. This problem is significant in various applications such as text processing, data validation, and more. A common pitfall is to use extra space or not achieve the required time complexity.
To solve this problem, we can use a two-pointer technique:
This approach ensures that we only traverse the string once, achieving O(n) time complexity, and we use only a constant amount of extra space, achieving O(1) space complexity.
Here is a step-by-step breakdown of the algorithm:
i
at the start (0) and j
at the end (n-1) of the string.i < j
:
s[i] != s[j]
. If true, return false
.i
one step to the right.j
one step to the left.false
, return true
.def is_palindrome(s: str) -> bool:
# Initialize two pointers
i, j = 0, len(s) - 1
# Loop until the pointers cross
while i < j:
# If characters at pointers do not match, it's not a palindrome
if s[i] != s[j]:
return False
# Move the pointers towards each other
i += 1
j -= 1
# If we complete the loop, the string is a palindrome
return True
# Example usage
print(is_palindrome("madam racecar madam")) # Output: True
print(is_palindrome("abcbx")) # Output: False
Time Complexity: O(n), where n is the length of the string. We traverse the string once.
Space Complexity: O(1), as we use a constant amount of extra space for the pointers.
Consider the following edge cases:
true
.true
.# Edge case examples
print(is_palindrome("")) # Output: True
print(is_palindrome("a")) # Output: True
print(is_palindrome("A man, a plan, a canal, Panama")) # Output: False (case-sensitive and includes spaces)
To test the solution comprehensively, consider a variety of test cases:
Using a testing framework like unittest
in Python can help automate and organize these tests.
When approaching such problems:
Understanding and solving palindrome problems is crucial for text processing and data validation. The two-pointer technique is an efficient way to achieve the desired time and space complexity. Practice and exploration of similar problems can further enhance problem-solving skills.
For further reading and practice: