Skip to content
Related Articles

Related Articles

Improve Article

Check if the characters in a string form a Palindrome in O(1) extra space

  • Difficulty Level : Medium
  • Last Updated : 20 May, 2021

Given string str. The string may contain lower-case letters, special characters, digits, or even white spaces. The task is to check whether only the letters present in the string are forming a Palindromic combination or not without using any extra space.
Note: It is not allowed to use extra space to solve this problem. Also, the letters present in the string are in lower-case and the string may contain special characters, digits, or even white spaces along with lowercase letters.

Examples

Attention reader! Don’t stop learning now. Get hold of all the important DSA concepts with the DSA Self Paced Course at a student-friendly price and become industry ready.  To complete your preparation from learning a language to DS Algo and many more,  please refer Complete Interview Preparation Course.

In case you wish to attend live classes with experts, please refer DSA Live Classes for Working Professionals and Competitive Programming Live for Students.

Input : str = “m a 343 la y a l am” 
Output : YES 
The characters in the string form the sequence “malayalam”, which is a palindrome.



Input : str = “malayalam” 
Output : YES

Approach:

  • Create two utility functions to get the first and last position of characters present in the string.
  • Start traversing the string, and keep finding the position of the first and last characters every time.
  • If the first and last characters are the same for every iteration and the string is traversed completely, then print YES, otherwise print NO.

Below is the implementation of the above approach: 

C++




// CPP program to check if the characters in
// the given string forms a Palindrome in
// O(1) extra space
#include <iostream>
using namespace std;
 
// Utility function to get the position of
// first character in the string
int firstPos(string str, int start, int end)
{
    int firstChar = -1;
 
    // Get the position of first character
    // in the string
    for (int i = start; i <= end; i++) {
        if (str[i] >= 'a' && str[i] <= 'z') {
            firstChar = i;
            break;
        }
    }
 
    return firstChar;
}
 
// Utility function to get the position of
// last character in the string
int lastPos(string str, int start, int end)
{
    int lastChar = -1;
 
    // Get the position of last character
    // in the string
    for (int i = start; i >= end; i--) {
        if (str[i] >= 'a' && str[i] <= 'z') {
            lastChar = i;
            break;
        }
    }
 
    return lastChar;
}
 
// Function to check if the characters in
// the given string forms a Palindrome in
// O(1) extra space
bool isPalindrome(string str)
{
    int firstChar = 0, lastChar = str.length() - 1;
    bool ch = true;
 
    for (int i = 0; i < str.length(); i++) {
        firstChar = firstPos(str, firstChar, lastChar);
        lastChar = lastPos(str, lastChar, firstChar);
 
        // break, when all letters are checked
        if (lastChar < 0 || firstChar < 0)
            break;
        if (str[firstChar] == str[lastChar]) {
            firstChar++;
            lastChar--;
            continue;
        }
 
        // if mismatch found, break the loop
        ch = false;
        break;
    }
 
    return (ch);
}
 
// Driver code
int main()
{
    string str = "m     a  343 la y a l am";
    if (isPalindrome(str))
        cout << "YES";
    else
        cout << "NO";
 
    return 0;
}

Java




// Java program to check if
// the characters in the given
// string forms a Palindrome
// in O(1) extra space
import java.io.*;
 
class GFG
{
 
// Utility function to get
// the position of first
// character in the string
static int firstPos(String str,
                    int start,
                    int end)
{
    int firstChar = -1;
     
    // Get the position of
    // first character in
    // the string
    for(int i = start; i <= end; i++)
    {
        if(str.charAt(i) >= 'a'&&
        str.charAt(i) <= 'z')
        {
            firstChar = i;
            break;
        }
    }
     
    return firstChar;
}
 
// Utility function to get
// the position of last
// character in the string
static int lastPos(String str,
                int start,
                int end)
{
    int lastChar = -1;
     
    // Get the position of last
    // character in the string
    for(int i = start; i >= end; i--)
    {
        if(str.charAt(i) >= 'a'&&
        str.charAt(i) <= 'z')
        {
            lastChar = i;
            break;
        }
    }
     
    return lastChar;
}
 
// Function to check if the
// characters in the given
// string forms a Palindrome
// in O(1) extra space
static boolean isPalindrome(String str)
{
    int firstChar = 0,
        lastChar = str.length() - 1;
    boolean ch = true;
 
    for (int i = 0; i < str.length(); i++)
    {
        firstChar = firstPos(str, firstChar,
                                lastChar);
        lastChar = lastPos(str, lastChar,
                                firstChar);
 
        // break, when all
        // letters are checked
        if (lastChar < 0 || firstChar < 0)
            break;
        if (str.charAt(firstChar) ==
            str.charAt(lastChar))
        {
            firstChar++;
            lastChar--;
            continue;
        }
         
        // if mismatch found,
        // break the loop
        ch = false;
        break;
    }
 
        return ch;
 
}
 
// Driver code
public static void main (String[] args)
{
    String str = "m a 343 la y a l am";
     
    if(isPalindrome(str))
        System.out.print("YES");
    else
    System.out.println("NO");
}
}
 
// This code is contributed
// by inder_verma.

Python 3




# Python 3 program to check if the characters
# in the given string forms a Palindrome in
# O(1) extra space
 
# Utility function to get the position of
# first character in the string
def firstPos(str, start, end):
 
    firstChar = -1
 
    # Get the position of first character
    # in the string
    for i in range(start, end + 1):
        if (str[i] >= 'a' and str[i] <= 'z') :
            firstChar = i
            break
 
    return firstChar
 
# Utility function to get the position of
# last character in the string
def lastPos(str, start, end):
 
    lastChar = -1
 
    # Get the position of last character
    # in the string
    for i in range(start, end - 1, -1) :
        if (str[i] >= 'a' and str[i] <= 'z') :
            lastChar = i
            break
 
    return lastChar
 
# Function to check if the characters in
# the given string forms a Palindrome in
# O(1) extra space
def isPalindrome(str):
 
    firstChar = 0
    lastChar = len(str) - 1
    ch = True
 
    for i in range(len(str)) :
        firstChar = firstPos(str, firstChar, lastChar);
        lastChar = lastPos(str, lastChar, firstChar);
 
        # break, when all letters are checked
        if (lastChar < 0 or firstChar < 0):
            break
        if (str[firstChar] == str[lastChar]):
            firstChar += 1
            lastChar -= 1
            continue
 
        # if mismatch found, break the loop
        ch = False
        break
 
    return (ch)
 
# Driver code
if __name__ == "__main__":
     
    str = "m     a 343 la y a l am"
    if (isPalindrome(str)):
        print("YES")
    else:
        print("NO")
 
# This code is contributed by ita_c

C#




// C# program to check if
// the characters in the given
// string forms a Palindrome
// in O(1) extra space
using System;
 
class GFG
{
 
// Utility function to get
// the position of first
// character in the string
static int firstPos(string str,
                    int start,
                    int end)
{
    int firstChar = -1;
     
    // Get the position of
    // first character in
    // the string
    for(int i = start; i <= end; i++)
    {
        if(str[i] >= 'a'&&
           str[i] <= 'z')
        {
            firstChar = i;
            break;
        }
    }
     
    return firstChar;
}
 
// Utiltiy function to get
// the position of last
// character in the string
static int lastPos(string str,
                   int start,
                   int end)
{
    int lastChar = -1;
     
    // Get the position of last
    // character in the string
    for(int i = start; i >= end; i--)
    {
        if(str[i] >= 'a'&&
           str[i] <= 'z')
        {
            lastChar = i;
            break;
        }
    }
     
    return lastChar;
}
 
// Function to check if the
// characters in the given
// string forms a Palindrome
// in O(1) extra space
static bool isPalindrome(string str)
{
    int firstChar = 0,
        lastChar = str.Length - 1;
    bool ch = true;
 
    for (int i = 0; i < str.Length; i++)
    {
        firstChar = firstPos(str, firstChar,
                                  lastChar);
        lastChar = lastPos(str, lastChar,
                                firstChar);
 
        // break, when all
        // letters are checked
        if (lastChar < 0 || firstChar < 0)
            break;
        if (str[firstChar] ==
            str[lastChar])
        {
            firstChar++;
            lastChar--;
            continue;
        }
         
        // if mismatch found,
        // break the loop
        ch = false;
        break;
    }
 
        return ch;
}
 
// Driver code
public static void Main ()
{
    string str = "m a 343 la y a l am";
     
    if(isPalindrome(str))
        Console.WriteLine("YES");
    else
        Console.WriteLine("NO");
}
}
 
// This code is contributed
// by inder_verma.

PHP




<?php
// PHP program to check if the
// characters in the given
// string forms a Palindrome
// in O(1) extra space
 
// Utility function to get the
// position of first character
// in the string
function firstPos($str, $start, $end)
{
    $firstChar = -1;
 
    // Get the position of first
    // character in the string
    for ($i = $start; $i <= $end; $i++)
    {
        if ($str[$i] >= 'a' and
            $str[$i] <= 'z')
        {
            $firstChar = $i;
            break;
        }
    }
 
    return $firstChar;
}
 
// Utility function to get the
// position of last character
// in the string
function lastPos($str, $start, $end)
{
    $lastChar = -1;
 
    // Get the position of last
    // character in the string
    for ( $i = $start; $i >= $end; $i--)
    {
        if ($str[$i] >= 'a' and
            $str[$i] <= 'z')
        {
            $lastChar = $i;
            break;
        }
    }
 
    return $lastChar;
}
 
// Function to check if the
// characters in the given
// string forms a Palindrome
// in O(1) extra space
function isPalindrome($str)
{
    $firstChar = 0;
    $lastChar = count($str) - 1;
    $ch = true;
 
    for ($i = 0; $i < count($str); $i++)
    {
        $firstChar = firstPos($str, $firstChar,
                                    $lastChar);
        $lastChar = lastPos($str, $lastChar,
                                  $firstChar);
 
        // break, when all letters are checked
        if ($lastChar < 0 or $firstChar < 0)
            break;
        if ($str[$firstChar] == $str[$lastChar])
        {
            $firstChar++;
            $lastChar--;
            continue;
        }
 
        // if mismatch found,
        // break the loop
        $ch = false;
        break;
    }
 
    return ($ch);
}
 
// Driver code
$str = "m a 343 la y a l am";
if (isPalindrome($str))
    echo "YES";
else
    echo "NO";
 
// This code is contributed
// by inder_verma.
?>

Javascript




<script>
// Javascript program to check if
// the characters in the given
// string forms a Palindrome
// in O(1) extra space
 
// Utility function to get
// the position of first
// character in the string
function firstPos(str,start,end)
{
    let firstChar = -1;
       
    // Get the position of
    // first character in
    // the string
    for(let i = start; i <= end; i++)
    {
        if(str[i] >= 'a'&&
        str[i] <= 'z')
        {
            firstChar = i;
            break;
        }
    }
       
    return firstChar;
}
 
// Utility function to get
// the position of last
// character in the string
function lastPos(str,start,end)
{
    let lastChar = -1;
       
    // Get the position of last
    // character in the string
    for(let i = start; i >= end; i--)
    {
        if(str[i] >= 'a'&&
        str[i] <= 'z')
        {
            lastChar = i;
            break;
        }
    }
       
    return lastChar;
}
 
   
// Function to check if the
// characters in the given
// string forms a Palindrome
// in O(1) extra space
function isPalindrome(str)
{
    let firstChar = 0,
        lastChar = str.length - 1;
    let ch = true;
   
    for (let i = 0; i < str.length; i++)
    {
        firstChar = firstPos(str, firstChar,
                                lastChar);
        lastChar = lastPos(str, lastChar,
                                firstChar);
   
        // break, when all
        // letters are checked
        if (lastChar < 0 || firstChar < 0)
            break;
        if (str[firstChar] ==
            str[lastChar])
        {
            firstChar++;
            lastChar--;
            continue;
        }
           
        // if mismatch found,
        // break the loop
        ch = false;
        break;
    }
   
        return ch;
}
 
// Driver code
let str = "m a 343 la y a l am";
if(isPalindrome(str))
    document.write("YES");
else
    document.write("NO");
 
     
 
// This code is contributed by avanitrachhadiya2155
</script>
Output: 
YES

 




My Personal Notes arrow_drop_up
Recommended Articles
Page :