Dada una string S y un entero K , la tarea es verificar si alguna permutación de la string se puede formar K veces repitiendo cualquier otra string.
Ejemplos:
Entrada: S = “abba”, K = 2
Salida: Sí
Explicación:
Permutaciones de una string dada –
{“aabb”, “abab”, “abba”, “baab”, “baba”, “bbaa”}
Como “abab” es una string repetida de “ab”+”ab” = “abab”, que también es una permutación de string.
Entrada: S = “abcabd”, K = 2
Salida: No
Explicación:
No existe tal string repetitiva en todas las permutaciones de la string dada.
Enfoque: La idea es encontrar la frecuencia de cada carácter de la string y verificar que la frecuencia del carácter sea un múltiplo del entero K dado . Si la frecuencia de todos los caracteres de la string es divisible por K , entonces hay una string que es una permutación de la string dada y también una string repetida K veces.
A continuación se muestra la implementación del enfoque anterior:
C++
// C++ implementation to check that // the permutation of the given string // is K times repeated string #include <bits/stdc++.h> using namespace std; // Function to check that permutation // of the given string is a // K times repeating String bool repeatingString(string s, int n, int k) { // if length of string is // not divisible by K if (n % k != 0) { return false; } // Frequency Array int frequency[123]; // Initially frequency of each // character is 0 for (int i = 0; i < 123; i++) { frequency[i] = 0; } // Computing the frequency of // each character in the string for (int i = 0; i < n; i++) { frequency[s[i]]++; } int repeat = n / k; // Loop to check that frequency of // every character of the string // is divisible by K for (int i = 0; i < 123; i++) { if (frequency[i] % repeat != 0) { return false; } } return true; } // Driver Code int main() { string s = "abcdcba"; int n = s.size(); int k = 3; if (repeatingString(s, n, k)) { cout << "Yes" << endl; } else { cout << "No" << endl; } return 0; }
Java
// Java implementation to check that // the permutation of the given String // is K times repeated String class GFG{ // Function to check that permutation // of the given String is a // K times repeating String static boolean repeatingString(String s, int n, int k) { // if length of String is // not divisible by K if (n % k != 0) { return false; } // Frequency Array int []frequency = new int[123]; // Initially frequency of each // character is 0 for (int i = 0; i < 123; i++) { frequency[i] = 0; } // Computing the frequency of // each character in the String for (int i = 0; i < n; i++) { frequency[s.charAt(i)]++; } int repeat = n / k; // Loop to check that frequency of // every character of the String // is divisible by K for (int i = 0; i < 123; i++) { if (frequency[i] % repeat != 0) { return false; } } return true; } // Driver Code public static void main(String[] args) { String s = "abcdcba"; int n = s.length(); int k = 3; if (repeatingString(s, n, k)) { System.out.print("Yes" +"\n"); } else { System.out.print("No" +"\n"); } } } // This code is contributed by PrinciRaj1992
Python3
# Python3 implementation to check that # the permutation of the given string # is K times repeated string # Function to check that permutation # of the given string is a # K times repeating String def repeatingString(s, n, k): # If length of string is # not divisible by K if (n % k != 0): return False # Frequency Array frequency = [0 for i in range(123)] # Initially frequency of each # character is 0 for i in range(123): frequency[i] = 0 # Computing the frequency of # each character in the string for i in range(n): frequency[s[i]] += 1 repeat = n // k # Loop to check that frequency of # every character of the string # is divisible by K for i in range(123): if (frequency[i] % repeat != 0): return False return True # Driver Code if __name__ == '__main__': s = "abcdcba" n = len(s) k = 3 if (repeatingString(s, n, k)): print("Yes") else: print("No") # This code is contributed by Samarth
C#
// C# implementation to check that // the permutation of the given String // is K times repeated String using System; class GFG{ // Function to check that permutation // of the given String is a // K times repeating String static bool repeatingString(String s, int n, int k) { // if length of String is // not divisible by K if (n % k != 0) { return false; } // Frequency Array int []frequency = new int[123]; // Initially frequency of each // character is 0 for (int i = 0; i < 123; i++) { frequency[i] = 0; } // Computing the frequency of // each character in the String for (int i = 0; i < n; i++) { frequency[s[i]]++; } int repeat = n / k; // Loop to check that frequency of // every character of the String // is divisible by K for (int i = 0; i < 123; i++) { if (frequency[i] % repeat != 0) { return false; } } return true; } // Driver Code public static void Main(String[] args) { String s = "abcdcba"; int n = s.Length; int k = 3; if (repeatingString(s, n, k)) { Console.Write("Yes" +"\n"); } else { Console.Write("No" +"\n"); } } } // This code is contributed by Rajput-Ji
Javascript
<script> // JavaScript implementation to check that // the permutation of the given string // is K times repeated string // Function to check that permutation // of the given string is a // K times repeating String function repeatingString( s, n, k) { // if length of string is // not divisible by K if (n % k != 0) { return false; } // Frequency Array var frequency = new Array(123); // Initially frequency of each // character is 0 for (let i = 0; i < 123; i++) { frequency[i] = 0; } // Computing the frequency of // each character in the string for (let i = 0; i < n; i++) { frequency[s[i]]++; } var repeat = n / k; // Loop to check that frequency of // every character of the string // is divisible by K for (let i = 0; i < 123; i++) { if (frequency[i] % repeat != 0) { return false; } } return true; } // Driver Code var s = "abcdcba"; var n = s.length; var k = 3; if (repeatingString(s, n, k)) { console.log("Yes"); } else { console.log("No" ); } // This code is contributed by ukasp. </script>
No
Análisis de rendimiento:
Complejidad temporal O(N)
Espacio auxiliar: O(1)
Publicación traducida automáticamente
Artículo escrito por prashantsharma12 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA