Dadas dos strings str1 y str2 , la tarea es contar el máximo de ocurrencias consecutivas de la string str2 en la string str1 .
Ejemplos:
Entrada: str1 = “abababcba”, str2 = “ba”
Salida : 2
Explicación: La string str2 aparece consecutivamente en la substring { str[1], …, str[4] }. Por lo tanto, el recuento máximo obtenido es de 2Entrada: str1 = «ababc», str2 = «ac»
Salida: 0
Explicación:
dado que str2 no está presente como una substring en str1, la salida requerida es 0.
Enfoque: siga los pasos a continuación para resolver el problema:
- Inicialice una variable, digamos cntOcc , para almacenar el recuento de ocurrencias de str2 en la string str1 .
- Iterar sobre el rango [CntOcc, 1] . Para cada i -ésimo valor en la iteración, concatene la string str2 i veces y verifique si la string concatenada es una substring de la string str1 o no. El primer i -ésimo valor para el cual se encuentra que es verdadero, imprímalo como la respuesta requerida.
A continuación se muestra la implementación:
C++
// C++ program to implement // the above approach #include <bits/stdc++.h> #include <string.h> using namespace std; int countFreq(string& pat, string& txt) { int M = pat.length(); int N = txt.length(); int res = 0; // A loop to slide pat[] one by one for(int i = 0; i <= N - M; i++) { // For current index i, check // for pattern match int j; for(j = 0; j < M; j++) if (txt[i + j] != pat[j]) break; // If pat[0...M-1] = txt[i, i+1, ...i+M-1] if (j == M) { res++; j = 0; } } return res; } // Function to count the maximum // consecutive occurrence of the // string str2 in the string str1 int maxRepeating(string str1, string str2) { // Stores the count of consecutive // occurrences of str2 in str1 int cntOcc = countFreq(str2, str1); // Concatenate str2 cntOcc times string Contstr = ""; for(int i = 0; i < cntOcc; i++) Contstr += str2; // Iterate over the string str1 // while Contstr is not present in str1 size_t found = str1.find(Contstr); while (found == string::npos) { found = str1.find(Contstr); // Update cntOcc cntOcc -= 1; // Update Contstr Contstr = ""; for(int i = 0; i < cntOcc; i++) Contstr += str2; } return cntOcc; } // Driver Code int main() { string str1 = "abababc"; string str2 = "ba"; cout << maxRepeating(str1, str2); return 0; } // This code is contributed by grand_master
Java
// Java program to implement // the above approach import java.util.*; class GFG { static int countFreq(String pat, String txt) { int M = pat.length(); int N = txt.length(); int res = 0; // A loop to slide pat[] one by one for(int i = 0; i <= N - M; i++) { // For current index i, check // for pattern match int j; for(j = 0; j < M; j++) if (txt.charAt(i + j) != pat.charAt(j)) break; // If pat[0...M-1] = txt[i, i+1, ...i+M-1] if (j == M) { res++; j = 0; } } return res; } // Function to count the maximum // consecutive occurrence of the // String str2 in the String str1 static int maxRepeating(String str1, String str2) { // Stores the count of consecutive // occurrences of str2 in str1 int cntOcc = countFreq(str2, str1); // Concatenate str2 cntOcc times String Contstr = ""; for(int i = 0; i < cntOcc; i++) Contstr += str2; // Iterate over the String str1 // while Contstr is not present in str1 boolean found = str1.contains(Contstr); while (!found) { found = str1.contains(Contstr); // Update cntOcc cntOcc -= 1; // Update Contstr Contstr = ""; for(int i = 0; i < cntOcc; i++) Contstr += str2; } return cntOcc; } // Driver Code public static void main(String[] args) { String str1 = "abababc"; String str2 = "ba"; System.out.print(maxRepeating(str1, str2)); } } // This code is contributed by 29AjayKumar
Python3
# Python3 program to implement # the above approach # Function to count the maximum # consecutive occurrence of the # string str2 in the string str1 def maxRepeating(str1, str2): # Stores the count of consecutive # occurrences of str2 in str1 cntOcc = str1.count(str2) # Concatenate str2 cntOcc times Contstr = str2 * cntOcc # Iterate over the string str1 # while Contstr is not present in str1 while(Contstr not in str1): # Update cntOcc cntOcc -= 1 # Update Contstr Contstr = str2 * cntOcc return cntOcc # Driver Code if __name__ =="__main__": str1 = "abababc" str2 = "ba" print(maxRepeating(str1, str2))
C#
// C# program to implement // the above approach using System; class GFG { static int countFreq(String pat, String txt) { int M = pat.Length; int N = txt.Length; int res = 0; // A loop to slide pat[] one by one for(int i = 0; i <= N - M; i++) { // For current index i, check // for pattern match int j; for(j = 0; j < M; j++) if (txt[i + j] != pat[j]) break; // If pat[0...M-1] = txt[i, i+1, ...i+M-1] if (j == M) { res++; j = 0; } } return res; } // Function to count the maximum // consecutive occurrence of the // String str2 in the String str1 static int maxRepeating(String str1, String str2) { // Stores the count of consecutive // occurrences of str2 in str1 int cntOcc = countFreq(str2, str1); // Concatenate str2 cntOcc times String Contstr = ""; for(int i = 0; i < cntOcc; i++) Contstr += str2; // Iterate over the String str1 // while Contstr is not present in str1 bool found = str1.Contains(Contstr); while (!found) { found = str1.Contains(Contstr); // Update cntOcc cntOcc -= 1; // Update Contstr Contstr = ""; for(int i = 0; i < cntOcc; i++) Contstr += str2; } return cntOcc; } // Driver Code public static void Main(String[] args) { String str1 = "abababc"; String str2 = "ba"; Console.Write(maxRepeating(str1, str2)); } } // This code is contributed by 29AjayKumar
Javascript
<script> // JavaScript program to implement // the above approach function countFreq(pat, txt) { var M = pat.length; var N = txt.length; var res = 0; // A loop to slide pat[] one by one for (var i = 0; i <= N - M; i++) { // For current index i, check // for pattern match var j; for (j = 0; j < M; j++) if (txt[i + j] !== pat[j]) break; // If pat[0...M-1] = txt[i, i+1, ...i+M-1] if (j === M) { res++; j = 0; } } return res; } // Function to count the maximum // consecutive occurrence of the // String str2 in the String str1 function maxRepeating(str1, str2) { // Stores the count of consecutive // occurrences of str2 in str1 var cntOcc = countFreq(str2, str1); // Concatenate str2 cntOcc times var Contstr = ""; for (var i = 0; i < cntOcc; i++) Contstr += str2; // Iterate over the String str1 // while Contstr is not present in str1 var found = str1.includes(Contstr); while (!found) { found = str1.includes(Contstr); // Update cntOcc cntOcc -= 1; // Update Contstr Contstr = ""; for (var i = 0; i < cntOcc; i++) Contstr += str2; } return cntOcc; } // Driver Code var str1 = "abababc"; var str2 = "ba"; document.write(maxRepeating(str1, str2)); </script>
2
Complejidad de tiempo: O(N 2 ), ya que estamos usando bucles anidados para atravesar N*N veces.
Espacio Auxiliar: O(N), ya que estamos usando espacio extra.
Publicación traducida automáticamente
Artículo escrito por saikumarkudikala y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA