Dada una string str separada por espacios , la tarea es encontrar la primera substring cuyo reverso es una palabra en la string. Todos los caracteres de la string están en minúsculas del alfabeto inglés. La string termina con # . Si no existe tal substring, devuelve -1
Ejemplos:
Entrada: str = “el mango es dulce cuando nam en lo prueba#”
Salida: man
Explicación: La substring “man” se invierte a “nam” y es una palabra en la string dadaEntrada: str = “hola mundo#”
Salida: -1
Acercarse:
- Almacena todas las palabras de la string en un mapa.
- Encuentre todas las substrings de la string.
- Para cada substring, compruebe si el reverso de la substring es una palabra de la string. Si no existe tal substring, imprima -1.
A continuación se muestra la implementación del enfoque anterior.
C++
// 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
// 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
# 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<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
Javascript
<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>
Producción:
man