Open In App

Perfect reversible string

Improve
Improve
Like Article
Like
Save
Share
Report

You are given a string ‘str’, the task is to check the reverses of all possible substrings of ‘str’ are present in ‘str’ or not. 

Examples: 

Input : str = "ab"
Output: "NO"
// all substrings are "a","b","ab" but reverse
// of "ab" is not present in str

Input : str = "aba"
Output: "YES"

Input : str = "abab"
Output: "NO"
// All substrings are "a", "b", "a", "b", "ab", 
// "ba", "ab", "aba", "bab", "abab" but reverse of
// "abab" is not present in str
Recommended Practice

A simple solution for this problem is to generate all possible substrings of ‘st’ and check if their reverse exist in the ‘str’ linearly.
An efficient solution for this problem is based on the fact that reverse of all substrings of ‘str’ will exist in ‘str’ if and only if the entire string ‘str’ is palindrome. We can justify this fact by considering the whole string, a reverse of it will exist only if it is palindrome. And if a string is palindrome, then all reverse of all substrings exist.

Below is implementation of above idea.  

C++




// C++ program to check if a string is perfect
// reversible or nor
#include<bits/stdc++.h>
using namespace std;
 
// This function basically checks if string is
// palindrome or not
bool isReversible(string str)
{
     int i = 0, j = str.length()-1;
 
     // iterate from left and right
     while (i < j)
     {
        if (str[i] != str[j])
            return false;
        i++;
        j--;
     }
     return true;
}
 
// Driver program to run the case
int main()
{
  string str="aba";
  if (isReversible(str))
      cout << "YES";
  else
      cout << "NO";
  return 0;
}


Java




// Java program to check
// if a string is perfect
// reversible or nor
import java.io.*;
 
class GFG
{
 
// This function basically
// checks if string is
// palindrome or not
static boolean isReversible(String str)
{
    int i = 0, j = str.length() - 1;
 
    // iterate from
    // left and right
    while (i < j)
    {
        if (str.charAt(i) != str.charAt(j))
            return false;
        i++;
        j--;
    }
    return true;
}
 
// Driver Code
public static void main (String[] args)
{
    String str = "aba";
    if (isReversible(str))
        System.out.print("YES");
    else
        System.out.print( "NO");
}
}
 
// This code is contributed
// by anuj_67.


Python3




# Python3 program to check if
# a string is perfect reversible or not
 
# This function basically checks
# if string is palindrome or not
def isReversible(str):
    i = 0; j = len(str) - 1;
 
    # iterate from left and right
    while (i < j):
        if (str[i] != str[j]):
            return False;
        i += 1;
        j -= 1;
    return True;
 
# Driver Code
str = "aba";
if (isReversible(str)):
    print("YES");
else:
    print("NO");
     
# This code is contributed by Princi Singh


C#




// C# program to check if a string
// is perfect reversible or nor
using System;
 
class GFG
{
 
// This function basically checks if
// string is palindrome or not
public static bool isReversible(string str)
{
    int i = 0, j = str.Length - 1;
 
    // iterate from left and right
    while (i < j)
    {
        if (str[i] != str[j])
        {
            return false;
        }
        i++;
        j--;
    }
    return true;
}
 
// Driver Code
public static void Main(string[] args)
{
    string str = "aba";
    if (isReversible(str))
    {
        Console.Write("YES");
    }
    else
    {
        Console.Write("NO");
    }
}
}
 
// This code is contributed
// by anuj_67


Javascript




<script>
 
// JavaScript program to check if a
// string is perfect reversible or not
 
// This function basically checks
// if string is palindrome or not
function isReversible(str)
{
    var i = 0,
    j = str.length - 1;
     
    // Iterate from left and right
    while (i < j)
    {
        if (str[i] != str[j])
            return false;
             
        i++;
        j--;
    }
    return true;
}
 
// Driver Code
var str = "aba";
 
if (isReversible(str))
    document.write("YES");
else
    document.write("NO");
     
// This code is contributed by rdtank   
     
</script>


Output

YES

Time complexity: O(n) where n is length of the string.
Auxiliary space: O(1)

Another method to find a string is perfect reversible or Not:-

You can also check the string is perfect reversible or not by checking the string is palindromic or not. We can justify this fact by considering the whole string, a reverse of it will exist only if it is palindrome. And if a string is palindrome, then all reverse of all substrings exist. 

Below is the method to find a palindrome of a string:-

C++




// C++ program to check if a string is perfect
// reversible or nor
#include<bits/stdc++.h>
using namespace std;
 
// This function basically checks if string is
// palindrome or not
 
bool isReversible(string s)
{
    // Stores the reverse of the
    // string S
    string p = s;
  
    // Reverse the string P
    reverse(p.begin(), p.end());
  
    // If S is equal to P
    if (s == p) {
        // Return "Yes"
        return true;
    }
    // Otherwise
   return false;
}
// Driver program to run the case
int main()
{
  string str="aba";
  if (isReversible(str))
      cout << "YES";
  else
      cout << "NO";
  return 0;
}
 
//code by ksam24000


C#




//c# code
using System;
 
namespace ConsoleApp1 {
class GFG {
    // Driver program to run the case
    static void Main(string[] args)
    {
        string str = "aba";
        if (IsReversible(str))
            Console.WriteLine("YES");
        else
            Console.WriteLine("NO");
    }
    // This function basically checks if string is
    // palindrome or not
    static bool IsReversible(string s)
    {
        // Stores the reverse of the
        // string S
        string p = s;
 
        char[] arr = p.ToCharArray();
        // Reverse the string P
        Array.Reverse(arr);
        p = new string(arr);
        return s == p;
    }
}
}
// code by ksam24000


Java




// Java program to check if a string is perfect
// reversible or not
import java.util.*;
 
public class Main {
    // This function basically checks if string is
    // palindrome or not
    static boolean isReversible(String s)
    {
        // Stores the reverse of the string s
        String p
            = new StringBuilder(s).reverse().toString();
 
        // If s is equal to p
        if (s.equals(p)) {
            // Return "Yes"
            return true;
        }
        // Otherwise
        return false;
    }
 
    // Driver program to run the case
    public static void main(String[] args)
    {
        String str = "aba";
        if (isReversible(str))
            System.out.println("YES");
        else
            System.out.println("NO");
    }
}


Python3




def isReversible(s):
    # Stores the reverse of the string s
    p = s[::-1]
 
    # If s is equal to p
    if s == p:
        # Return True
        return True
    # Otherwise
    return False
 
# Driver program to run the case
if __name__ == "__main__":
    str = "aba"
    if isReversible(str):
        print("YES")
    else:
        print("NO")
         
# This code is contributed by divyansh2212


Javascript




// JavaScript program to check if a string is perfect
// reversible or not
 
// This function basically checks if string is
// palindrome or not
function isReversible(s) {
// Stores the reverse of the
// string S
    let p = s.split("").reverse().join("");
 
// If S is equal to P
    if (s == p) {
        // Return "Yes"
        return true;
    }
// Otherwise
    return false;
}
 
// Driver program to run the case
let str = "aba";
if (isReversible(str))
    console.log("YES");
else
    console.log("NO");


Output

YES


Last Updated : 08 Mar, 2023
Like Article
Save Article
Previous
Next
Share your thoughts in the comments
Similar Reads