Dada una string S de longitud N , la tarea es encontrar la longitud de la substring X más larga de la string S tal que:
- Ninguna substring no vacía de X es un prefijo de S.
- Ninguna substring no vacía de X es un sufijo de S.
- Si no es posible tal string, imprima −1.
Ejemplos:
Entrada: S = “abcdefb”
Salida: 4
Explicación: cdef es la substring que cumple las condiciones.Entrada: S = “cccc”
Salida: -1
Explicación: Ninguna substring puede satisfacer las condiciones.
Enfoque: Para resolver el problema, siga la siguiente observación:
Observaciones:
Dado que un prefijo comienza desde el comienzo de la string S y un sufijo comienza desde el final de una string S. Por lo tanto , la longitud máxima de la substring puede ser la longitud de la string S – 2 y no puede tener elementos que estén al principio o al final de la string.
Así que seleccione la substring que no tenga ningún carácter que sea el primero o el último carácter de la string. esta será la substring más grande que satisfaga las condiciones.
Siga los pasos mencionados para resolver el problema:
- Atraviesa la string desde i = 1 hasta el final de la string .
- Compruebe si se encuentra algún carácter que no sea igual al primer y último carácter de la string.
- Si se encuentra, considérelo parte de la substring resultante.
- De lo contrario, no se incluiría en la substring.
- El resultado sería la longitud máxima de la substring que satisfaría las condiciones.
A continuación se muestra la implementación del enfoque anterior:
C++
// C++ code to implement the above approach #include <bits/stdc++.h> using namespace std; // Function to find the largest substring int findLargest(string s) { int maxi = -1; int sum = 0; // Loop to find the largest substring // satisfying the given conditions for (int i = 1; i < s.size() - 1; i++) { if (s[i] != s[0] && s[i] != s[s.length() - 1]) { sum++; } else { maxi = max(sum, maxi); sum = 0; } } maxi = max(sum, maxi); if (maxi == 0) { maxi = -1; } // Return the maximum length return maxi; } // Driver code int main() { string s = "abcdefb"; // Function call cout << (findLargest(s)); return 0; } // This code is contributed by rakeshsahni
Java
// Java code to implement the above approach import java.io.*; class GFG { // Function to find the largest substring public static int findLargest(String s) { int max = -1; int sum = 0; // Loop to find the largest substring // satisfying the given conditions for (int i = 1; i < s.length() - 1; i++) { if (s.charAt(i) != s.charAt(0) && s.charAt(i) != s.charAt(s.length() - 1)) { sum++; } else { max = Math.max(sum, max); sum = 0; } } max = Math.max(sum, max); if (max == 0) { max = -1; } // Return the maximum length return max; } // Driver code public static void main(String[] args) { String s = "abcdefb"; // Function call System.out.println(findLargest(s)); } }
Python
# Python code to implement the above approach # Function to find the largest substring def findLargest(s): maxi = -1 sum = 0 # Loop to find the largest substring # satisfying the given conditions for i in range(1, len(s) - 1): if (s[i] != s[0] and s[i] != s[len(s) - 1]): sum += 1 else: maxi = max(sum, maxi) sum = 0 maxi = max(sum, maxi) if (maxi == 0): maxi = -1 # Return the maximum length return maxi # Driver code if __name__ == "__main__": s = "abcdefb" # Function call print(findLargest(s)) # This code is contributed by hrithikgarg03188.
C#
// C# code to implement the above approach using System; public class GFG{ // Function to find the largest substring public static int findLargest(string s) { int max = -1; int sum = 0; // Loop to find the largest substring // satisfying the given conditions for (int i = 1; i < s.Length - 1; i++) { if (s[i] != s[0] && s[i] != s[s.Length - 1]) { sum++; } else { max = Math.Max(sum, max); sum = 0; } } max = Math.Max(sum, max); if (max == 0) { max = -1; } // Return the maximum length return max; } // Driver code static public void Main (){ string s = "abcdefb"; // Function call Console.Write(findLargest(s)); } } // This code is contributed by hrithikgarg03188.
Javascript
<script> // JavaScript code for the above approach // Function to find the largest substring function findLargest(s) { let maxi = -1; let sum = 0; // Loop to find the largest substring // satisfying the given conditions for (let i = 1; i < s.length - 1; i++) { if (s[i] != s[0] && s[i] != s[s.length - 1]) { sum++; } else { maxi = Math.max(sum, maxi); sum = 0; } } maxi = Math.max(sum, maxi); if (maxi == 0) { maxi = -1; } // Return the maximum length return maxi; } // Driver code let s = "abcdefb"; // Function call document.write(findLargest(s)); // This code is contributed by Potta Lokesh </script>
4
Complejidad temporal: O(N)
Espacio auxiliar: O(1)
Publicación traducida automáticamente
Artículo escrito por lakshayr32 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA