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

Given a 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:

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

## Recommended: Please try your approach on {IDE} first, before moving on to the solution.

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 first and last characters everytime.
• If the first and last characters are same for every iteration and the string is traversed completely then print YES otherwise print NO.

Below is the implementation of above approach:

## C++

 `// CPP program to check if the characters in ` `// the given string forms a Palindrome in ` `// O(1) extra space ` `#include ` `using` `namespace` `std; ` ` `  `// Utilty 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; ` `} ` ` `  `// Utilty 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  ` `{ ` ` `  `// Utilty 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; ` `} ` ` `  `// Utilty 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 ` ` `  `# Utilty 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 ` ` `  `# Utilty 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  ` `{ ` ` `  `// Utilty 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; ` `} ` ` `  `// Utilty 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

 `= ``'a'` `and` `            ``\$str``[``\$i``] <= ``'z'``)  ` `        ``{ ` `            ``\$firstChar` `= ``\$i``; ` `            ``break``; ` `        ``} ` `    ``} ` ` `  `    ``return` `\$firstChar``; ` `} ` ` `  `// Utilty 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. ` `?> `

Output:

```YES
```

My Personal Notes arrow_drop_up

If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.

Improved By : inderDuMCA, chitranayal

Article Tags :
Practice Tags :

1

Please write to us at contribute@geeksforgeeks.org to report any issue with the above content.