Description:
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.
Examples:
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.
Solution in Python:
To solve this problem, we need to determine if a given string sss is a palindrome after converting all uppercase letters to lowercase and removing all non-alphanumeric characters. Here’s a step-by-step plan:
- Filter the String: Remove all non-alphanumeric characters and convert the remaining characters to lowercase.
- Check for Palindrome: Compare the filtered string with its reverse to check if it reads the same forwards and backwards.
Python
class Solution:
def isPalindrome(self, s: str) -> bool:
# Step 1: Filter the string to remove non-alphanumeric characters and convert to lowercase
filtered_chars = [char.lower() for char in s if char.isalnum()]
# Step 2: Create the filtered string
filtered_string = ''.join(filtered_chars)
# Step 3: Check if the filtered string is the same as its reverse
return filtered_string == filtered_string[::-1]
# Example usage:
solution = Solution()
print(solution.isPalindrome("A man, a plan, a canal: Panama")) # Output: True
print(solution.isPalindrome("race a car")) # Output: False
print(solution.isPalindrome(" ")) # Output: True
Explanation:
- Filtering the String:
- We use a list comprehension to iterate over each character in the string sss.
char.lower()
converts the character to lowercase.char.isalnum()
checks if the character is alphanumeric (letters or numbers).- Only characters that pass the
isalnum()
check are included in the list.
- Creating the Filtered String:
- We join the list of filtered characters into a single string using
''.join(filtered_chars)
.
- We join the list of filtered characters into a single string using
- Checking for Palindrome:
- We compare the filtered string with its reverse (achieved using slicing
[::-1]
). - If the filtered string is the same as its reverse, the function returns
True
, indicating that the string is a palindrome. - Otherwise, it returns
False
.
- We compare the filtered string with its reverse (achieved using slicing
Solution in Javascript:
JavaScript
/**
* @param {string} s
* @return {boolean}
*/
var isPalindrome = function(s) {
// Step 1: Filter the string to remove non-alphanumeric characters and convert to lowercase
let filteredChars = [];
for (let i = 0; i < s.length; i++) {
let char = s[i];
if (char.match(/[a-zA-Z0-9]/)) { // Check if the character is alphanumeric
filteredChars.push(char.toLowerCase());
}
}
// Step 2: Create the filtered string
let filteredString = filteredChars.join('');
// Step 3: Check if the filtered string is the same as its reverse
let reversedString = filteredString.split('').reverse().join('');
return filteredString === reversedString;
};
// Example usage:
console.log(isPalindrome("A man, a plan, a canal: Panama")); // Output: true
console.log(isPalindrome("race a car")); // Output: false
console.log(isPalindrome(" ")); // Output: true
Solution in Java:
Java
class Solution {
public boolean isPalindrome(String s) {
// Step 1: Filter the string to remove non-alphanumeric characters and convert to lowercase
StringBuilder filtered = new StringBuilder();
for (int i = 0; i < s.length(); i++) {
char c = s.charAt(i);
if (Character.isLetterOrDigit(c)) {
filtered.append(Character.toLowerCase(c));
}
}
// Step 2: Create the filtered string
String filteredString = filtered.toString();
// Step 3: Check if the filtered string is the same as its reverse
String reversedString = filtered.reverse().toString();
return filteredString.equals(reversedString);
}
// Main method for testing the function
public static void main(String[] args) {
Solution solution = new Solution();
System.out.println(solution.isPalindrome("A man, a plan, a canal: Panama")); // Output: true
System.out.println(solution.isPalindrome("race a car")); // Output: false
System.out.println(solution.isPalindrome(" ")); // Output: true
}
}
Solution in C#:
C#
public class Solution {
public bool IsPalindrome(string s) {
// Step 1: Filter the string to remove non-alphanumeric characters and convert to lowercase
var filteredChars = new List<char>();
foreach (char c in s) {
if (char.IsLetterOrDigit(c)) {
filteredChars.Add(char.ToLower(c));
}
}
// Step 2: Create the filtered string
string filteredString = new string(filteredChars.ToArray());
// Step 3: Check if the filtered string is the same as its reverse
char[] charArray = filteredString.ToCharArray();
Array.Reverse(charArray);
string reversedString = new string(charArray);
return filteredString == reversedString;
}
}