Given a space-separated string str, the task is to find the first substring whose reverse is a word in the string. All the characters of the string are lowercase English alphabet. The string ends with #. If no such substring is present, return -1
Examples:
Input: str = “mango is sweet when nam en tastes it#”
Output: man
Explanation: Substring “man” is reversed to “nam” and it is a word in the given stringInput: str = “hello world#”
Output: -1
Approach:
- Store all the words of the string on a map.
- Find all the substrings of the string.
- For each substring, check whether the reverse of the substring is a word of the string. If no such substring exists, print -1.
Below is the implementation of the above approach.
// C++ program to find first substring #include <bits/stdc++.h> using namespace std;
// Function to find first substring string first_substring(string s) { int n = s.length(), c = 0;
string s1, s2;
map<string, int > mpp;
// Storing the words present in string
for ( int i = 0; i < n; i++) {
if (s[i] == ' ' || s[i] == '#' ) {
s1 = s.substr(c, i - c);
mpp[s1] = 1;
c = i + 1;
}
}
// Calculating for all
// possible valid substring.
for ( int i = 0; i < n; i++) {
if (s[i] == ' ' ) {
continue ;
}
for ( int j = 0; j < n; j++) {
if (s[j] == ' ' ) {
break ;
}
s1 = s.substr(i, j - i + 1);
s2 = s1;
reverse(s1.begin(), s1.end());
if (mpp[s1]) {
return s2;
}
}
}
return "-1" ;
} // Driver code int main()
{ string s, s1;
s = "mango is sweet when nam en tastes it#" ;
s1 = first_substring(s);
cout << s1 << "\n" ;
return 0;
} |
// Java program to find first subString import java.util.*;
class GFG
{ // Function to find first subString static String first_subString(String s)
{ int n = s.length(), c = 0 ;
String s1, s2;
HashMap<String, Integer> mpp =
new HashMap<String, Integer>();
// Storing the words present in String
for ( int i = 0 ; i < n; i++)
{
if (s.charAt(i) == ' ' || s.charAt(i) == '#' )
{
s1 = s.substring(c, i);
mpp.put(s1, 1 );
c = i + 1 ;
}
}
// Calculating for all
// possible valid subString.
for ( int i = 0 ; i < n; i++)
{
if (s.charAt(i) == ' ' )
{
continue ;
}
for ( int j = 0 ; j < n; j++)
{
if (s.charAt(i) == ' ' )
{
break ;
}
s1 = s.substring(i, j - i + 1 );
s2 = s1;
s1 = reverse(s1);
if (mpp.containsKey(s1))
{
return s2;
}
}
}
return "-1" ;
} static String reverse(String input)
{ char [] a = input.toCharArray();
int l, r = a.length - 1 ;
for (l = 0 ; l < r; l++, r--)
{
char temp = a[l];
a[l] = a[r];
a[r] = temp;
}
return String.valueOf(a);
} // Driver code public static void main(String[] args)
{ String s, s1;
s = "mango is sweet when nam en tastes it#" ;
s1 = first_subString(s);
System.out.print(s1+ "\n" );
} } // This code is contributed by Rajput-Ji |
# Python3 program to find first substring # Function to find first substring def first_substring(s) :
n = len (s); c = 0 ;
mpp = {};
# Storing the words present in string
for i in range (n) :
if (s[i] = = ' ' or s[i] = = '#' ) :
s1 = s[c: i];
mpp[s1] = 1 ;
c = i + 1 ;
# Calculating for all
# possible valid substring.
for i in range (n) :
if (s[i] = = ' ' ) :
continue ;
for j in range (n) :
if (s[j] = = ' ' ) :
break ;
s1 = s[i : j + 1 ];
s2 = s1;
s1 = s1[:: - 1 ];
if s1 in mpp :
if mpp[s1] :
return s2;
return "-1" ;
# Driver code if __name__ = = "__main__" :
s = "mango is sweet when nam en tastes it#" ;
s1 = first_substring(s);
print (s1);
# This code is contributed by AnkitRai01 |
// C# program to find first subString using System;
using System.Collections.Generic;
class GFG
{ // Function to find first subString static String first_subString(String s)
{ int n = s.Length, c = 0;
String s1, s2;
Dictionary<String, int > mpp =
new Dictionary<String, int >();
// Storing the words present in String
for ( int i = 0; i < n; i++)
{
if (s[i] == ' ' || s[i] == '#' )
{
s1 = s.Substring(c, i - c);
mpp.Add(s1, 1);
c = i + 1;
}
}
// Calculating for all
// possible valid subString.
for ( int i = 0; i < n; i++)
{
if (s[i] == ' ' )
{
continue ;
}
for ( int j = 0; j < n; j++)
{
if (s[i] == ' ' )
{
break ;
}
s1 = s.Substring(i, j - i + 1);
s2 = s1;
s1 = reverse(s1);
if (mpp.ContainsKey(s1))
{
return s2;
}
}
}
return "-1" ;
} static String reverse(String input)
{ char [] a = input.ToCharArray();
int l, r = a.Length - 1;
for (l = 0; l < r; l++, r--)
{
char temp = a[l];
a[l] = a[r];
a[r] = temp;
}
return String.Join( "" , a);
} // Driver code public static void Main(String[] args)
{ String s, s1;
s = "mango is sweet when nam en tastes it#" ;
s1 = first_subString(s);
Console.Write(s1 + "\n" );
} } // This code is contributed by Rajput-Ji |
<script> // Javascript program to find first substring // Function to find first substring function first_substring(s)
{ var n = s.length, c = 0;
var s1, s2;
var mpp = new Map();
// Storing the words present in string
for ( var i = 0; i < n; i++) {
if (s[i] == ' ' || s[i] == '#' ) {
s1 = s.substring(c, i);
mpp.set(s1, 1);
c = i + 1;
}
}
// Calculating for all
// possible valid substring.
for ( var i = 0; i < n; i++) {
if (s[i] == ' ' ) {
continue ;
}
for ( var j = 0; j < n; j++) {
if (s[j] == ' ' ) {
break ;
}
s1 = s.substring(i, j + 1);
s2 = s1;
s1 = s1.split( '' ).reverse().join( '' );
if (mpp.has(s1)) {
return s2;
}
}
}
return "-1" ;
} // Driver code var s, s1;
s = "mango is sweet when nam en tastes it#" ;
s1 = first_substring(s); document.write( s1 ); </script> |
man
Time complexity: O(n2) where n is length of string
Auxiliary space: O(n) as it is using extra space for map mpp