Conteos de distintas substrings consecutivas de longitud dos usando C++ STL

Dada una string, la tarea es imprimir todas las substrings distintas de longitud dos en la string dada. Todas las substrings deben imprimirse en orden lexicográfico.
Ejemplos: 
 

Input: str = "abcab"
Output: ab-2
        bc-1
        ca-1

Input: str = "xyz"
Output: xy-1
        yz-1

La idea de este artículo es demostrar el mapa y el par en C++ STL.
Declaramos un mapa d_pairs que usa una clave de par de caracteres y cuenta como valor. Iteramos sobre la string dada desde el índice de inicio para almacenar cada par consecutivo si aún no está presente e incrementamos su conteo en el mapa. Después de completar el bucle, obtenemos todos los pares consecutivos distintos y su correspondiente recuento de ocurrencias en el contenedor del mapa. 
Tenga en cuenta que el mapa se usa porque necesitamos la salida en orden. Podríamos usar unordered_map() si la salida no fuera necesaria en orden ordenado. La complejidad temporal de las operaciones underdered_map() es O(1) mientras que la del mapa es O(Log n)
 

CPP

// C++ STL based program to print all distinct
// substrings of size 2 and their counts.
#include<bits/stdc++.h>
using namespace std;
 
void printDistinctSubStrs(string str)
{
    // Create a map to store unique substrings of
    // size 2
    map<pair<char,char>, int> dPairs;
 
    // Count occurrences of all pairs
    for (int i=0; i<str.size()-1; i++)
        dPairs[make_pair(str[i], str[i+1])]++;
 
    // Traverse map to print sub-strings and their
    // counts.
    cout << "Distinct sub-strings with counts:\n";
    for (auto it=dPairs.begin(); it!=dPairs.end(); it++)
        cout << it->first.first << it->first.second
             << "-" << it->second << " ";
}
 
// Driver code
int main()
{
    string str = "abcacdcacabacaassddssklac";
    printDistinctSubStrs(str);
    return 0;
}

Producción: 
 

Distinct sub-strings with counts:
aa-1 ab-2 ac-4 as-1 ba-1 bc-1 ca-4 cd-1 dc-1 dd-1 ds-1 kl-1 la-1 sd-1 sk-1 ss-2 

Este artículo es una contribución de Himanshu Gupta (Bagri) . Si te gusta GeeksforGeeks y te gustaría contribuir, también puedes escribir un artículo usando write.geeksforgeeks.org o enviar tu artículo por correo a review-team@geeksforgeeks.org. Vea su artículo que aparece en la página principal de GeeksforGeeks y ayude a otros Geeks.
Escriba comentarios si encuentra algo incorrecto o si desea compartir más información sobre el tema tratado anteriormente.
 

Publicación traducida automáticamente

Artículo escrito por GeeksforGeeks-1 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 *