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
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++ 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 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 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# 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 |
<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> |
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++ 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# 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 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" );
}
} |
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 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" );
|
YES