Conteggio delle sottostringhe con almeno K caratteri distinti a coppie

Blog

Data una stringa S e un intero A , il compito è trovare il numero di sottostringhe che consiste almeno in A caratteri distinti a coppie aventi la stessa frequenza.



Esempi:

Ingresso: _ S = abasa, K = 2_



_Produzione: _ 5

Spiegazione:



Le sottostringhe nell'avere 2 caratteri distinti a coppie con la stessa frequenza sono {ab, ba, as, sa, bas}.

Ingresso: _ S = abhay, K = 3_

_Produzione: _ 4

Spiegazione:

Le sottostringhe che hanno 3 caratteri distinti a coppie con la stessa frequenza sono {abh, bha, hay, bhay}.

**Approccio ingenuo: **L'approccio più semplice per risolvere questo problema è quello di genera tutte le possibili sottostringhe della stringa data e controlla se entrambe le condizioni sono soddisfatte. Se risulta essere vero, aumenta contare . Infine, stampa contare .

Complessità temporale: _ O(N3)_

Spazio ausiliario: _ O (1) _

Approccio efficiente: Per ottimizzare l'approccio di cui sopra, seguire i passaggi seguenti per risolvere il problema:

app "visualizza tweet protetti"
  • Controlla se le frequenze di ogni carattere sono le stesse. Se trovato vero, genera semplicemente tutte le sottostringhe per verificare se ogni carattere soddisfa la condizione di almeno**_N _** caratteri distinti a coppie .
  • Precalcola le frequenze dei caratteri per verificare le condizioni per ogni sottostringa.

Di seguito è riportata l'implementazione dell'approccio di cui sopra:

  • C++

// C++ Program for the above approach

#include

**using** **namespace** std;

// Function to find the substring with K

// pairwise distinct characters and

// with same frequency

**int** no_of_substring(string s, **int** N)

{

// Stores the occurrence of each

// character in the substring

**int** fre[26];

**int** str_len;

// Length of the string

str_len = (``**int**``)s.length();

**int** count = 0;

// Iterate over the string

**for** (``**int** i = 0; i

// Set all values at each index to zero

**memset**``(fre, 0, **sizeof**``(fre));

**int** max_index = 0;

// Stores the count of

// unique characters

**int** dist = 0;

// Moving the substring ending at j

**for** (``**int** j = i; j

// Calculate the index of

// character in frequency array

**int** x = s[j] - 'a'``;

**if** (fre[x] == 0)

dist++;

// Increment the frequency

fre[x]++;

// Update the maximum index

max_index = max(max_index, fre[x]);

// Check for both the conditions

**if** (dist >= N && ((max_index * dist)

== (j - i + 1)))

count++;

}

}

// Return the answer

**return** count;

}

// Driver Code

**int** main()

{

string s = 'abhay'``;

**int** N = 3;

// Function call

cout << no_of_substring(s, N);

**return** 0;

}

Produzione:

4

_Complessità temporale: _ O (N2)

_Spazio ausiliario: _ Oppure (1)

Attenzione lettore! Non smettere di imparare ora. Ottieni tutti i concetti DSA importanti con il Corso di autoapprendimento DSA a un prezzo adatto agli studenti e diventa pronto per l'industria.

#hash #matematico #ricerca #stringhe #conteggio delle frequenze #sottostringa

www.geeksforgeeks.org

Conteggio delle sottostringhe con almeno K caratteri distinti a coppie

Un portale di informatica per geek. Contiene articoli di informatica e programmazione ben scritti, ben pensati e ben spiegati, quiz e domande sulla pratica/programmazione competitiva/intervista aziendale.