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â. Properties of a Palindrome String:A palindrome string has some properties which are mentioned below: A palindrome string has a symmetric structure which means that the
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 palindrome Input: s = "abc" Output: 0Explanation: s is not a palindrome Using Two-Pointers - O(n) time and O(1) spaceThe idea is to keep two pointers, one at the beginning (left)
14 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