Given a sentence s, the task is to check if it is a palindrome sentence or not. A palindrome sentence is a sequence of characters, such as a word, phrase, or series of symbols, that reads the same backward as forward after converting all uppercase letters to lowercase and removing all non-alphanumeric characters.
Examples:
Input: s = "Too hot to hoot."
Output: True
Explanation: If we remove all non-alphanumeric characters and convert all uppercase letters to lowercase, string s will become "toohottohoot" which is a palindrome.
Input: s = "Abc 012..## 10cbA"
Output: True
Explanation: If we remove all non-alphanumeric characters and convert all uppercase letters to lowercase, string s will become "abc01210cba" which is a palindrome.
Input: s = "ABC $. def01ASDF.."
Output: False
Explanation: If we remove all non-alphanumeric characters and convert all uppercase letters to lowercase, string s will become "abcdef01asdf" which is not a palindrome.
[Naive Approach] Comparing original and reversed strings - O(n) Time and O(n) Space
A simple approach is to create a new string containing only the alphanumeric characters of the original string. Also, in case of uppercase letters convert them to lowercase. Then, compare this new string with its reverse to know if the sentence is a palindromic sentence or not.
C++ // C++ program to check string for palindrome // by comparing original and reversed strings #include <algorithm> #include <iostream> using namespace std; bool sentencePalindrome(string &s) { // create a new string having only // alphanumeric characters string s1 = ""; for (char ch : s) { if (isalnum(ch)) { s1.push_back(tolower(ch)); } } // find reverse of this new string string rev = s1; reverse(rev.begin(), rev.end()); // compare string and its reverse return s1 == rev; } int main() { string s = "Too hot to hoot."; cout << (sentencePalindrome(s) ? "True" : "False") << endl; return 0; }
Java // Java program to check string for palindrome by comparing // original and reversed strings import java.util.*; class GfG { static boolean sentencePalindrome(String s) { // create a new string having only // alphanumeric characters StringBuilder s1 = new StringBuilder(); for (char ch : s.toCharArray()) { if (Character.isLetterOrDigit(ch)) { s1.append(Character.toLowerCase(ch)); } } // find reverse of this new string StringBuilder rev = new StringBuilder(s1.toString()); rev.reverse(); // compare string and its reverse return s1.toString().equals(rev.toString()); } public static void main(String[] args) { String s = "Too hot to hoot."; System.out.println(sentencePalindrome(s) ? "True" : "False"); } }
Python # Python program to check string for palindrome # by comparing original and reversed strings def sentencePalindrome(s): # create a new list having only # alphanumeric characters s1 = [] for ch in s: if ch.isalnum(): s1.append(ch.lower()) # Convert the new list to string s1 = ''.join(s1) # find reverse of this new string rev = s1[::-1] # compare string and its reverse return s1 == rev if __name__ == "__main__": s = "Too hot to hoot." print("True" if sentencePalindrome(s) else "False")
C# // C# program to check string for palindrome // by comparing original and reversed strings using System; using System.Text; using System.Linq; class GfG { // Function to check if the sentence is a palindrome static bool sentencePalindrome(ref string s) { StringBuilder s1 = new StringBuilder(); // Filter out non-alphanumeric characters and // convert to lowercase foreach (char ch in s) { if (Char.IsLetterOrDigit(ch)) s1.Append(Char.ToLower(ch)); } string s2 = s1.ToString(); // find reverse of this new string char[] revArray = s2.ToCharArray().Reverse().ToArray(); string rev = new string(revArray); // compare string and its reverse return s2 == rev; } static void Main() { string s = "Too hot to hoot."; Console.WriteLine(sentencePalindrome(ref s) ? "True" : "False"); } }
JavaScript // JavaScript program to check string for palindrome // by comparing original and reversed strings function sentencePalindrome(s) { // create an array to store only alphanumeric characters let s1 = []; for (let i = 0; i < s.length; i++) { let ch = s[i]; // Check if the character is alphanumeric if (/[a-zA-Z0-9]/.test(ch)) { s1.push(ch.toLowerCase()); } } // find reverse of this new string by joining the array // into a string let rev = s1.slice().reverse().join(""); // compare string and its reverse return s1.join("") === rev; } let s = "Too hot to hoot."; console.log(sentencePalindrome(s) ? "True" : "False");
[Expected Approach] Using Two Pointers - O(n) Time and O(1) Space
The idea is to use two pointers approach to find if a sentence is palindrome or not. Maintain one pointer at the beginning and the other at the end of the sentence. The pointers move towards each other, comparing characters along the way. If the characters match, we continue moving both pointers inward; if they differ, we return false, indicating the sentence is not a palindrome.
Also, while comparing we skip all non-alphanumeric characters. Finally, if the pointers cross each other, this means that the sentence is a palindrome.
C++ // C++ program to find if a sentence is // palindrome using two pointers #include <iostream> using namespace std; // To check sentence is palindrome or not bool sentencePalindrome(string s) { int i = 0, j = s.length() - 1; // Compares character until they are equal while (i < j) { // Skip non alphabet character // from left side if (!isalnum(s[i])) i++; // Skip non alphabet character // from right side else if (!isalnum(s[j])) j--; // If characters are equal // update the pointers else if (tolower(s[i]) == tolower(s[j])) i++, j--; // If characters are not equal then // sentence is not palindrome else return false; } // Return true as sentence is palindrome return true; } int main() { string s = "Too hot to hoot."; cout << (sentencePalindrome(s) ? "True" : "False") << endl; return 0; }
C // C program to find if a sentence is // palindrome using two pointers #include <stdio.h> #include <stdbool.h> // To check sentence is palindrome or not bool sentencePalindrome(const char* s) { int i = 0, j = strlen(s) - 1; // Compares character until they are equal while (i < j) { // Skip non alphabet character // from left side if (!isalnum(s[i])) i++; // Skip non alphabet character // from right side else if (!isalnum(s[j])) j--; // If characters are equal // update the pointers else if (tolower(s[i]) == tolower(s[j])) i++, j--; // If characters are not equal then // sentence is not palindrome else return false; } // Return true as sentence is palindrome return true; } int main() { const char* s = "Too hot to hoot."; printf("%s\n", sentencePalindrome(s) ? "True" : "False"); return 0; }
Java // Java program to find if a sentence is // palindrome using two pointers class GfG { // To check sentence is palindrome or not static boolean sentencePalindrome(String s) { int i = 0, j = s.length() - 1; // Compares character until they are equal while (i < j) { // Skip non alphabet character from left side if (!Character.isLetterOrDigit(s.charAt(i))) i++; // Skip non alphabet character from right side else if (!Character.isLetterOrDigit(s.charAt(j))) j--; // If characters are equal update the pointers else if (Character.toLowerCase(s.charAt(i)) == Character.toLowerCase(s.charAt(j))) { i++; j--; } // If characters are not equal then sentence // is not palindrome else return false; } // Return true as sentence is palindrome return true; } public static void main(String[] args) { String s = "Too hot to hoot."; System.out.println(sentencePalindrome(s) ? "True" : "False"); } }
Python # Python program to find if a sentence is # palindrome using two pointers # To check sentence is palindrome or not def sentencePalindrome(s): i, j = 0, len(s) - 1 # Compares character until they are equal while i < j: # Skip non alphabet character # from left side if not s[i].isalnum(): i += 1 # Skip non alphabet character # from right side elif not s[j].isalnum(): j -= 1 # If characters are equal # update the pointers elif s[i].lower() == s[j].lower(): i += 1 j -= 1 # If characters are not equal then # sentence is not palindrome else: return False # Return true as sentence is palindrome return True if __name__ == "__main__": s = "Too hot to hoot." print("True" if sentencePalindrome(s) else "False")
C# // C# program to find if a sentence is // palindrome using two pointers using System; class GfG { // To check sentence is palindrome or not static bool sentencePalindrome(string s) { int i = 0, j = s.Length - 1; // Compares character until they are equal while (i < j) { // Skip non alphabet character // from left side if (!char.IsLetterOrDigit(s[i])) i++; // Skip non alphabet character // from right side else if (!char.IsLetterOrDigit(s[j])) j--; // If characters are equal // update the pointers else if (char.ToLower(s[i]) == char.ToLower(s[j])) { i++; j--; } // If characters are not equal then // sentence is not palindrome else return false; } // Return true as sentence is palindrome return true; } static void Main() { string s = "Too hot to hoot."; Console.WriteLine(sentencePalindrome(s) ? "True" : "False"); } }
JavaScript // JavaScript program to find if a sentence is // palindrome using two pointers // To check sentence is palindrome or not function sentencePalindrome(s) { let i = 0, j = s.length - 1; // Compares character until they are equal while (i < j) { // Skip non alphabet character // from left side if (!s[i].match(/[a-zA-Z0-9]/)) i++; // Skip non alphabet character // from right side else if (!s[j].match(/[a-zA-Z0-9]/)) j--; // If characters are equal // update the pointers else if (s[i].toLowerCase() === s[j].toLowerCase()) i++, j--; // If characters are not equal then // sentence is not palindrome else return false; } // Return true as sentence is palindrome return true; } // Driver Code let s = "Too hot to hoot."; console.log(sentencePalindrome(s) ? "True" : "False");
Similar Reads
Palindrome String Coding Problems A string is called a palindrome if the reverse of the string is the same as the original one.Example: âmadamâ, âracecarâ, â12321â.Palindrome StringProperties of a Palindrome String:A palindrome string has some properties which are mentioned below:A palindrome string has a symmetric structure which m
2 min read
Palindrome String Given a string s, the task is to check if it is palindrome or not.Example:Input: s = "abba"Output: 1Explanation: s is a palindromeInput: s = "abc" Output: 0Explanation: s is not a palindromeUsing Two-Pointers - O(n) time and O(1) spaceThe idea is to keep two pointers, one at the beginning (left) and
13 min read
Check Palindrome by Different Language
Easy Problems on Palindrome
Sentence Palindrome Given a sentence s, the task is to check if it is a palindrome sentence or not. A palindrome sentence is a sequence of characters, such as a word, phrase, or series of symbols, that reads the same backward as forward after converting all uppercase letters to lowercase and removing all non-alphanumer
9 min read
Check if actual binary representation of a number is palindrome Given a non-negative integer n. The problem is to check if binary representation of n is palindrome or not. Note that the actual binary representation of the number is being considered for palindrome checking, no leading 0âs are being considered. Examples : Input : 9 Output : Yes (9)10 = (1001)2 Inp
6 min read
Print longest palindrome word in a sentence Given a string str, the task is to print longest palindrome word present in the string str.Examples: Input : Madam Arora teaches Malayalam Output: Malayalam Explanation: The string contains three palindrome words (i.e., Madam, Arora, Malayalam) but the length of Malayalam is greater than the other t
14 min read
Count palindrome words in a sentence Given a string str and the task is to count palindrome words present in the string str. Examples: Input : Madam Arora teaches malayalam Output : 3 The string contains three palindrome words (i.e., Madam, Arora, malayalam) so the count is three. Input : Nitin speaks malayalam Output : 2 The string co
5 min read
Check if characters of a given string can be rearranged to form a palindrome Given a string, Check if the characters of the given string can be rearranged to form a palindrome. For example characters of "geeksogeeks" can be rearranged to form a palindrome "geeksoskeeg", but characters of "geeksforgeeks" cannot be rearranged to form a palindrome. Recommended PracticeAnagram P
14 min read
Lexicographically first palindromic string Rearrange the characters of the given string to form a lexicographically first palindromic string. If no such string exists display message "no palindromic string". Examples: Input : malayalam Output : aalmymlaa Input : apple Output : no palindromic string Simple Approach: 1. Sort the string charact
13 min read