JAVA program porównujący ciągi znakowe


(Marcin Adamczyk) #1

Witam...

W jaki sposob napisac w javie algorytm proszący o wpisanie 10 łańcuchow znakowych, sprawdzajacy czy wsrod nich sa takie same i podajacy liczbe takich samych napisow.

Oczywscie nie chodzi mi tu o metode silowa :wink:


(Sawyer47) #2

To znaczy masz znaleźć duble jak najmniejszym kosztem, tzn. nie porównywać każdego z każdym - 1 z 2, 3, 4, ...10 i tak razy dziesięć? Tak wychodziłoby max 90 porównań (mam nadzieję, że dobrze liczę o tej godzinie :))

Mogę się mylić, w końcu rano jest, ale mam nadzieję, że dobrze myślę...

PS. Można by też trzymać je od razu w strukturze która trzyma dane uporządkowane. Niezbyt dobrze znam Javę, ale na pewno jest taka struktura wśród bibliotek standardowych.

PS2. Można to zrobić też za pomocą tablicy asocjacyjnej na zasadzie ciąg = ilość wystąpień. Tak przynajmniej duża część programistów zrobiłaby to w Perlu :slight_smile: Domyślam się (zgaduję), że Java ma klasę tablic asocjacyjnych, tylko jest kwestia ich wydajności.


(GL1zdA) #3

Tak jest chyba najprościej - za pomocą klasy HashMap.


(somekind) #4

W javie nie da się napisać algorytmu. Podobnie jak w żadnym innym języku programowania.

Nadzieja nie jest najlepsza w tym przypadku :slight_smile: Moim zdaniem 45 porównań (elementarne wiadomości z kombinatoryki czasem się przydają).


(Sawyer47) #5

Aj, mea culpa, oczywiście że to będzie 10 nad 2 czyli 45, no ale o takich rzeczach o 7:30 się nie pamięta :stuck_out_tongue:

Tutaj użycie HashMap będzie chyba najprostsze, najszybsze do napisania i w działaniu.


(GL1zdA) #6

Cały kod: (pewnie nie jest optymalny, ale działa)

package stringcomp;


import java.util.HashMap;

import java.util.Map;

import javax.swing.JOptionPane;


public class Main {


    public static void main(String[] args) {

        Map map = new HashMap();


        for( int i = 0; i < 10; i++ ){

            String input = JOptionPane.showInputDialog("Podaj słowo");

            Integer count = map.get(input);                

            map.put(input, count == null ? 1 : ++count);

        }


        System.out.println(map.toString());

    }

}