Compruebe si alguna permutación de string es una string repetida K veces

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>
Producción: 

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

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *