Witam,
Mój problem wygląda następująco. Mam do zrobienia zadanie które brzmi tak:
Znajdź słowo, w którym występuje największa liczba różnych liter. Wypisz to słowo i liczbę występujących w nim różnych liter. Jeśli słów o największej liczbie różnych liter jest więcej niż jedno, wypisz pierwsze z nich pojawiające się w pliku z danymi. Dla danych z pliku przyklad.txt wynikiem jest: AKLMNOPRSTWZA 12
W pliku posiadam 1000 wierszy z różnymi słowami
Wpadłem na pomysł że mogę Stworzyć Listę, która będzie zawierała X tablic z Charami tzn. np. pierwsze słowo trafia do listy, jest rozkładane na znaki i każdy ten znak trafia do tablicy. I jak już będę miał cała tą listę gotową, to wtedy użyje HashSety które zwrócą mi do każdej tablicy tylko unikalne elementy, Na samym końcu będzie tylko trzeba sprawdzić która tablica zawiera największą ilość znaków. I teraz mam lekki problem bo nie wiem czy dobrze zadeklarowałem taką listę z tablicami, i nie wiem czy w ogóle to można zrobić. Gdyby ktoś zechciał pomóc byłbym wdzięczny :)
public static void Zadanie2() throws IOException
{
BufferedReader br = null;
FileWriter fw = null;
try
{
br = new BufferedReader(new FileReader(sd));
fw = new FileWriter(sp);
String l;
int max = 0;
List <char[]> ListaSlow = new ArrayList<char[]>();
int p = 0;
while((l = br.readLine()) != null)
{
for(int i = 0; i < l.length(); i++)
{
ListaSlow.add(p, l.charAt(i)); }
p++;
}
}
finally
{
if(br != null)
{
br.close();
}
if(fw != null)
{
fw.close();
}
}
}
EDIT:
Rozwiązanie tego zadania wygląda następująco:
public static void Zadanie2() throws IOException
{
BufferedReader br = null;
FileWriter fw = null;
try
{
br = new BufferedReader(new FileReader(sd));
fw = new FileWriter(sp);
String l;
int max = 0;
String slowo = "";
Set<Character> UnikalneZnaki = new HashSet<Character>();
while((l = br.readLine()) != null)
{
char[] znaki = l.toCharArray();
for(int i= 0; i< znaki.length; i++)
{
UnikalneZnaki.add(znaki[i]);
}
if(UnikalneZnaki.size() > max)
{
max = UnikalneZnaki.size();
slowo = l;
}
UnikalneZnaki.clear();
}
System.out.print(slowo + " " + max);
}
finally
{
if(br != null)
{
br.close();
}
if(fw != null)
{
fw.close();
}
}
}