Informatică, întrebare adresată de Patrick100, 8 ani în urmă

Cel mai frecvent cuvânt din text

Identifică cuvântul care apare de cele mai multe ori în text.


Date de intrare

Vei citi de la tastatură textul emailului. Acesta poate să se întindă pe mai multe linii și conține doar litere mici și mari ale alfabetului englez și spații.


Date de ieșire

Se va afișa cuvântul care apare de cele mai multe ori în textul emailului.


Restricții și precizări

Textul nu conține mai mult de 100 000 de cuvinte, iar fiecare cuvânt poate conține până la 20 de caractere. Dacă există mai multe cuvinte care apar de mai multe ori, se va afișa cel care e minim lexicografic.

Clasa care conține metoda main trebuie să fie publică și să se numească prog.

Exemplu


Date de intrare

mersi pentru lista de instructiuni

e de ajutor

mersi


Date de ieșire

de


o idee de rezolvare In limbajul java va rog


Apollyon: Cel mai ușor e să te folosești de un Map în Java cu cheile formate din cuvinte și ca valoare pentru fiecare cheie de câte ori apare cuvântul respectiv. La final cauți cuvântul cu cele mai multe apariții și-l afișezi.
Apollyon: de exemplul în cazul lui "de" și "mersi" ambele apar de 2 ori, în cazul ăsta e ales primul?
Patrick100: Multumesc frumos

Răspunsuri la întrebare

Răspuns de andrei750238
1

import java.io.BufferedReader;

import java.io.InputStreamReader;

import java.util.Map;

import java.util.SortedMap;

import java.util.TreeMap;

public class prog {

   public static void main(String[] args) throws Exception {

       //Creaza BufferedReader pentru intrare standard

       InputStreamReader inputStreamReader = new InputStreamReader(System.in);

       BufferedReader reader = new BufferedReader(inputStreamReader);

       //Folosim un sorted map pentru a retine perechi de tipul (cheie=sir caractere, valoare = int) unde cheia e cuvantul si valoarea e numarul de aparitii

       SortedMap<String, Integer> smp = new TreeMap<>();

       //Cat timp avem linii de citit, citeste linia

       String linie_curenta = reader.readLine();

       while(linie_curenta != null){

           //Separa linia in array de cuvinte

           String[] arr = linie_curenta.split(" ");

           //Mareste numarul de aparitii pentru fiecare cuvant gasit

           for (String cuv: arr) {

               //Daca e sir gol sari peste

               if(cuv.length()==0) continue;

               Integer val_anterioara = smp.get(cuv);

               if(val_anterioara==null)

                   val_anterioara=0;

               smp.put(cuv, val_anterioara + 1);

           }

           linie_curenta = reader.readLine();

       }

       //Cauta si afiseaza cuvant cu numar maxim de aparitii

       String cuv_maxim = "";

       int nr_aparitii = 0;

       for (Map.Entry mapElement : smp.entrySet()) {

           int value = (int)mapElement.getValue();

           if(value>nr_aparitii){

               cuv_maxim = (String)mapElement.getKey();

               nr_aparitii = value;

           }

       }

       //Afiseaza rezultat

       System.out.println(cuv_maxim);

   }

}

► Explicatie :

Folosim SortedMap pentru a retine perechi de tipul (cheie, valoare) unde

  • cheie = cuvantul
  • valoare = numarul de aparitii a cuvantului respectiv

Incrementam de fiecare data numarul de aparitii al cuvantului.

La final luam la rand toate elementele si determinam cuvantul care are numarul maxim de aparitii care apare primul in SortedMap. Fiind o structura sortata unde cheia este String cheile vor aparea in ordine lexicogramaticala. Din acest motiv il luam pe primul element.

Iti sugerez sa cauti pe internet informatii cu privire la SortedMap si la functiile folosite pentru a intelege mai bine cum functioneaza programul

Alte întrebări interesante