Regula 1: Nu repetăm cuvinte
E-mailul e format din litere mici ale alfabetului englez și spații. Sarcina ta e acum să îl convertești într-o listă de cuvinte ordonate alfabetic, în care fiecare cuvânt din textul inițial să apară o singură dată.
Date de intrare
Vei citi de la tastatură textul e-mailului care trebuie convertit. Acesta poate să se întindă pe mai multe linii.
Date de ieșire
Se vor afișa cuvintele distincte din textul citit, în ordine alfabetică, câte unul pe fiecare rând.
Restricții și precizări
Textul nu conține mai mult de 100000 de cuvinte, iar fiecare cuvânt poate conține până la 20 de caractere.
Pentru a scurta timpul de execuție al programului tău folosește BufferedReader
Clasa care conține metoda main trebuie să se numească prog
Exemplu
Date de intrare
mersi pentru lista de instructiuni
e de ajutor
mersi
Date de ieșire
ajutor
de
e
instructiuni
lista
mersi
pentru
In java va rog o rezolvare
Răspunsuri la întrebare
► PROGRAM JAVA:
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.SortedSet;
import java.util.TreeSet;
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);
//Set sortat pentru retinerea unei multimi de cuvinte in ordine crescatoare
SortedSet<String> cuvinte = new TreeSet<>();
//String care retine linia curenta
String linie_curenta;
//Cat timp avem linii de citit, citeste linia
while((linie_curenta = reader.readLine()) != null){
//Separa linia in array de cuvinte
String[] arr = linie_curenta.split(" ");
//Adauga fiecare cuvant din array in set
for (String cuv:arr){
if(cuv.length()==0) continue;
cuvinte.add(cuv);
}
}
//Afiseaza fiecare cuvant din multimea ordonata
for(String cuv:cuvinte){
System.out.println(cuv);
}
}
}
► EXPLICATIE:
◘ SortedSet este o interfata care pastreaza o multime sortata de elemente:
- In cazul stringurilor multimea e sortata automat alfabetic daca nu oferim un comparator propriu. Atunci cand vom scoate cuvintele acestea vor fi automat in ordine crescatoare. Deoarece se foloseste un arbore binar de cautare modificat complexitatea e foarte buna la modificarea elementelor (complexitate logaritmica)
- Nu sunt permise elemente duplicate, cu aceasi valoare. Daca adaugam un cuvant de mai multe ori acesta va fi retinut in SortedSet o singura data.
Te invit sa cauti mai multe informatii pe internet despre SortedSet daca doresti sa aflii ce alte functii sunt suportate. Idem pentru BufferedReader.
◘ Pentru a marca sfarsitul unui rand la tastatura folosimcombinatia de taste Ctrl + D
◘ Nota : Am implementat bug fix-ul din urma discutiei avute in comentarii (linia selectata in imagine cu albastru)
if(cuv.length()==0) continue;
In acest mod se sare peste adaugarea stringurilor goale.