String binaria periódica : una string binaria se llama periódica si se puede escribir como repetición de una string binaria de menor o igual longitud. Por ejemplo, 101010 es una string binaria periódica con período 10, ya que podemos obtener la string agregando 10 repetidamente a sí misma. En general, la string S con período P significa que S i es igual a S i + P .
Problema: Dada una string binaria S , la tarea es encontrar la string periódica con el período mínimo posible con las siguientes condiciones adicionales
1) La string S dada debe ser una subsecuencia del resultado
2) La longitud del resultado no debe ser más del doble la longitud de la string de entrada.
Ejemplos:
Entrada: S = “01”
Salida: 0101
Explicación: La string de salida tiene un período de 2 y ha dado una string como subsecuencia.Entrada: S = “111”
Salida: 111
Explicación: La string de salida tiene un período de 1.Entrada: S = “110”
Salida: 101010
Explicación: La string de salida tiene un período de 2 y ha dado una string como subsecuencia. Tenga en cuenta que 110110 no es una respuesta porque la duración del período es mayor.
Enfoque:
La idea principal depende de dos posibilidades:
- Si la string consta de todos los 1 o todos los 0, la respuesta es la misma string dada S que tiene un período como 1 .
- Si la string consta de elementos diferentes, encuentre la string con período 2 y que tenga una longitud del doble de la longitud de la string dada S
A continuación se muestra la implementación del enfoque anterior:
C++
// C++ implementation to find the // periodic string with minimum period #include <bits/stdc++.h> using namespace std; // Function to find the periodic string // with minimum period void findPeriodicString(string S) { int l = 2 * S.length(); int count = 0; for (int i = 0; i < S.length(); i++) { if (S[i] == '1') count++; } // Print the string S if it // consists of similar elements if (count == S.length() || count == 0) cout << S << "\n"; // Find the required periodic // string with period 2 else { char arr[l]; for (int i = 0; i < l; i += 2) { arr[i] = '1'; arr[i + 1] = '0'; } for (int i = 0; i < l; i++) cout << arr[i]; cout << "\n"; } } // Driver Code int main() { string S = "1111001"; findPeriodicString(S); return 0; }
Java
// Java implementation to find the // periodic string with minimum period class GFG{ // Function to find the periodic string // with minimum period static void findPeriodicString(String S) { int l = 2 * S.length(); int count = 0; for(int i = 0; i < S.length(); i++) { if (S.charAt(i) == '1') count++; } // Print the string S if it // consists of similar elements if (count == S.length() || count == 0) System.out.println(S); // Find the required periodic // string with period 2 else { char arr[] = new char[l]; for(int i = 0; i < l; i += 2) { arr[i] = '1'; arr[i + 1] = '0'; } for(int i = 0; i < l; i++) System.out.print(arr[i]); System.out.println(); } } // Driver Code public static void main (String[] args) { String S = "1111001"; findPeriodicString(S); } } // This code is contributed by chitranayal
Python3
# Python3 implementation to find the # periodic with minimum period # Function to find the periodic string # with minimum period def findPeriodicString(S): l = 2 * len(S) count = 0 for i in range(len(S)): if (S[i] == '1'): count += 1 # Print the S if it # consists of similar elements if (count == len(S) or count == 0): print(S) # Find the required periodic # with period 2 else: arr = ['0']*l for i in range(0, l, 2): arr[i] = '1' arr[i + 1] = '0' for i in range(l): print(arr[i],end="") # Driver Code if __name__ == '__main__': S = "1111001" findPeriodicString(S) # This code is contributed by mohit kumar 29
C#
// C# implementation to find the // periodic string with minimum period using System; class GFG{ // Function to find the periodic string // with minimum period static void findPeriodicString(string S) { int l = 2 * S.Length; int count = 0; for(int i = 0; i < S.Length; i++) { if (S[i] == '1') count++; } // Print the string S if it // consists of similar elements if (count == S.Length || count == 0) Console.WriteLine(S); // Find the required periodic // string with period 2 else { char[] arr = new char[l]; for(int i = 0; i < l; i += 2) { arr[i] = '1'; arr[i + 1] = '0'; } for(int i = 0; i < l; i++) Console.Write(arr[i]); Console.WriteLine(); } } // Driver code public static void Main () { string S = "1111001"; findPeriodicString(S); } } // This code is contributed by sanjoy_62
Javascript
<script> // Javascript implementation to find the // periodic string with minimum period // Function to find the periodic string // with minimum period function findPeriodicString(S) { let l = 2 * S.length; let count = 0; for(let i = 0; i < S.length; i++) { if (S[i] == '1') count++; } // Print the string S if it // consists of similar elements if (count == S.length || count == 0) document.write(S + "<br>"); // Find the required periodic // string with period 2 else { let arr = new Array(l); for(let i = 0; i < l; i += 2) { arr[i] = '1'; arr[i + 1] = '0'; } for(let i = 0; i < l; i++) document.write(arr[i]); document.write("<br>"); } } // Driver Code let S = "1111001"; findPeriodicString(S); // This code is contributed by avanitrachhadiya2155 </script>
10101010101010
Complejidad de tiempo : O(N)
Publicación traducida automáticamente
Artículo escrito por epistler_999 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA