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 core challenge of this problem is to determine if a given string reads the same backward as forward. This is significant in various applications such as text processing, data validation, and more. A common pitfall is to overlook the need for an efficient solution that runs in linear time and uses constant space.
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 few extra variables, maintaining 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
and decrement j
.
#include <iostream>
#include <string>
bool isPalindrome(const std::string& s) {
int i = 0;
int j = s.length() - 1;
while (i < j) {
// Check if characters at i and j are not equal
if (s[i] != s[j]) {
return false; // Not a palindrome
}
// Move pointers towards the center
i++;
j--;
}
return true; // String is a palindrome
}
int main() {
std::string str1 = "madam racecar madam";
std::string str2 = "abcbx";
std::cout << "Is \"" << str1 << "\" a palindrome? " << (isPalindrome(str1) ? "true" : "false") << std::endl;
std::cout << "Is \"" << str2 << "\" a palindrome? " << (isPalindrome(str2) ? "true" : "false") << std::endl;
return 0;
}
The time complexity of this approach is O(n) because we traverse the string once. The space complexity is O(1) as we only use a few extra variables.
Consider the following edge cases:
To test the solution comprehensively, consider the following test cases:
Use a variety of test cases to ensure the solution handles all scenarios correctly.
When approaching such problems:
Understanding and solving palindrome problems is crucial for developing strong problem-solving skills. Practice regularly and explore different algorithms to enhance your understanding.
For further reading and practice: