Imprima todos los números repetidos de 3 dígitos en un número muy grande

Dado un número muy grande, imprime todos los números repetidos de 3 dígitos con su frecuencia. Si un número de 3 dígitos aparece más de una vez, imprima el número y su frecuencia. 
Ejemplo: 

Input: 123412345123456
Output: 123 - 3 times
         234 - 3 times
         345 - 2 times 

Input: 43243243
Output: 432 - 2 times
        324 - 2 times
        243 - 2 times

Enfoque: dado que el número es muy grande, se almacena en una string. Inicialmente, el primer número de tres dígitos serán los primeros tres caracteres de la izquierda. Iterar en la string desde el tercer índice desde la izquierda en la string y hacer %100 para eliminar el primer carácter y agregar el i -ésimo número de índice al final para obtener el nuevo número. Aumente la frecuencia del número en el mapa hash. Al final, cuando se generan todos los números de 3 dígitos, imprima todos los números que tienen una frecuencia de más de 1. 
A continuación se muestra la implementación de la idea anterior: 
 

C++

// CPP program to print 3 digit repeating numbers
#include <bits/stdc++.h>
using namespace std;
 
// function to print 3
// digit repeating numbers
void printNum(string s)
{
    int i = 0, j = 0, val = 0;
 
    // Hashmap to store the
    // frequency of a 3 digit number
    map <int, int> mp;
 
    // first three digit number
    val = (s[0] - '0') * 100
            + (s[1] - '0') * 10
            + (s[2] - '0');
 
    mp[val] = 1;
    for (i = 3; i < s.length(); i++) {
        val = (val % 100) * 10 + s[i] - '0';
 
        // if key already exists
        // increase value by 1
        if (mp.find(val) != mp.end()) {
            mp[val] = mp[val] + 1;
        }
        else {
            mp[val] = 1;
        }
    }
 
    // Output the three digit numbers with frequency>1
    for (auto m : mp) {
        int key = m.first;
        int value = m.second;
        if (value > 1)
            cout << key  << " - " << value << " times" << endl;
    }
}
 
// Driver Code
int main()
{
    // Input string
    string input = "123412345123456";
  
    // Calling Function
    printNum(input);
}
// This code is contributed by Nishant Tanwar

Java

// Java program to print 3 digit repeating numbers
import java.util.*;
import java.lang.*;
 
public class GFG {
 
    // function to print 3
    // digit repeating numbers
    static void printNum(String s)
    {
        int i = 0, j = 0, val = 0;
 
        // Hashmap to store the
        // frequency of a 3 digit number
        LinkedHashMap<Integer, Integer> hm
            = new LinkedHashMap<>();
 
        // first three digit number
        val = (s.charAt(0) - '0') * 100
              + (s.charAt(1) - '0') * 10
              + (s.charAt(2) - '0');
 
        hm.put(val, 1);
        for (i = 3; i < s.length(); i++) {
            val = (val % 100) * 10 + s.charAt(i) - '0';
 
            // if key already exists
            // increase value by 1
            if (hm.containsKey(val)) {
                hm.put(val, hm.get(val) + 1);
            }
            else {
                hm.put(val, 1);
            }
        }
 
        // Output the three digit numbers with frequency>1
        for (Map.Entry<Integer, Integer> en : hm.entrySet()) {
            int key = en.getKey();
            int value = en.getValue();
            if (value > 1)
                System.out.println(key + " - " + value + " times");
        }
    }
 
    // Driver Code
    public static void main(String args[])
    {
 
        // Input string
        String input = "123412345123456";
 
        // Calling Function
        printNum(input);
    }
}

Python3

# Python3 program to print
# 3 digit repeating numbers
 
# Function to print 3
# digit repeating numbers
def printNum(s):
 
    i, j, val = 0, 0, 0
   
    # Hashmap to store the
    # frequency of a 3 digit number
    mp = {}
   
    # first three digit number
    val = ((ord(s[0]) - ord('0')) * 100 +
           (ord(s[1]) - ord('0')) * 10 +
           (ord(s[2]) - ord('0')))
   
    mp[val] = 1
    for i in range (3, len(s)):
        val = (val % 100) * 10 + ord(s[i]) - ord('0')
   
        # if key already exists
        # increase value by 1
        if (val in mp):
            mp[val] = mp[val] + 1
        else:
            mp[val] = 1
       
    # Output the three digit
    # numbers with frequency>1
    for m in mp:
        key = m
        value = mp[m]
        if (value > 1):
            print (key, " - ", value, " times")
   
# Driver Code
if __name__ == "__main__":
 
    # Input string
    input = "123412345123456"
    
    # Calling Function
    printNum(input)
 
# This code is contributed by Chitranayal

C#

// C# program to print 3 digit repeating numbers
using System;
using System.Collections.Generic;            
 
class GFG
{
 
    // function to print 3
    // digit repeating numbers
    static void printNum(String s)
    {
        int i = 0, val = 0;
 
        // Hashmap to store the
        // frequency of a 3 digit number
        Dictionary<int,
                   int> hm = new Dictionary<int,
                                            int>();
 
        // first three digit number
        val = (s[0] - '0') * 100 +
              (s[1] - '0') * 10 +
              (s[2] - '0');
 
        hm.Add(val, 1);
        for (i = 3; i < s.Length; i++)
        {
            val = (val % 100) * 10 + s[i] - '0';
 
            // if key already exists
            // increase value by 1
            if (hm.ContainsKey(val))
            {
                hm[val] = hm[val] + 1;
            }
            else
            {
                hm.Add(val, 1);
            }
        }
 
        // Output the three digit numbers with frequency>1
        foreach(KeyValuePair<int, int> en in hm)
        {
            int key = en.Key;
            int value = en.Value;
            if (value > 1)
                Console.WriteLine(key + " - " +
                                  value + " times");
        }
    }
 
    // Driver Code
    public static void Main(String []args)
    {
 
        // Input string
        String input = "123412345123456";
 
        // Calling Function
        printNum(input);
    }
}
 
// This code is contributed by PrinciRaj1992

Javascript

<script>
 
// Javascript program to print 3 digit repeating numbers
     
    // function to print 3
    // digit repeating numbers
    function printNum(s)
    {
        let i = 0, j = 0, val = 0;
  
        // Hashmap to store the
        // frequency of a 3 digit number
        let hm = new Map();
  
        // first three digit number
        val = (s[0].charCodeAt(0) - '0'.charCodeAt(0)) * 100
              + (s[1].charCodeAt(0) - '0'.charCodeAt(0)) * 10
              + (s[2].charCodeAt(0) - '0'.charCodeAt(0));
  
        hm.set(val, 1);
        for (i = 3; i < s.length; i++) {
            val = (val % 100) * 10 + s[i].charCodeAt(0) - '0'.charCodeAt(0);
  
            // if key already exists
            // increase value by 1
            if (hm.has(val)) {
                hm.set(val, hm.get(val) + 1);
            }
            else {
                hm.set(val, 1);
            }
        }
  
        // Output the three digit numbers with frequency>1
        for (let [Key, Value] of hm.entries()) {
            let key = Key;
            let value = Value;
            if (value > 1)
                document.write(key + " - " + value + " times<br>");
        }
    }
     
    // Driver Code
     
    // Input string
    let input = "123412345123456";
    // Calling Function
    printNum(input);
     
 
// This code is contributed by avanitrachhadiya2155
</script>
Producción: 

123 - 3 times
234 - 3 times
345 - 2 times

 

Publicación traducida automáticamente

Artículo escrito por Saurav Jain 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 *