# First substring whose reverse is a word in the string

Given a space-separated string str, the task is to find the first substring whose reverse is a word in the string. All characters of the string are lowercase English alphabets. 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 string

Input: str = “hello world#”
Output: -1

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

Approach:

1. Store all the words of the string in a map.
2. Find all substrings of the string.
3. 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++

 // C++ program to find first substring #include using namespace std;    // Function to find first substring string first_substring(string s) {     int n = s.length(), c = 0;     string s1, s2;     map 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

 // 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 mpp =          new HashMap();        // 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

 # 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#

 // 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 mpp =          new Dictionary();        // 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

Output:

man

My Personal Notes arrow_drop_up

Check out this Author's contributed articles.

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 : AnkitRai01, Rajput-Ji

Article Tags :
Practice Tags :

1

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