LINUX.ORG.RU

Сравнение всех строк в массиве

 ,


0

1

Сабж. На выходе true если все строки равны, и false в противном случае. Например, на входе массив:

["test", "testak", "testishka"]
Результатом алгоритма для этого входа — false.

Ясно-понятно, что можно просто каждую строку сравнить со всеми последующими. Вот:

public boolean eq(String[] input) {
    final int length = input.length;
    for (int i = 0; i < length; i++) {
        for (int j = i + 1; j < length; j++) {
            if (!input[i].equals(input[j])) {
                return false;
            }
        }
    }

    return true;
}
Что-то вроде пузырьковой сортировки получилось, только не сортировка, а сравнение :) Недостаток этого метода заключается в сложности алгоритма: O(n^2)

Кто может предложить метод лучше?

★★

Последнее исправление: cetjs2 (всего исправлений: 1)

public static boolean eq(String[] input) {
    final int length = input.length;
    for (int i = 0; i < length - 1; i++) {
        if (!input[i].equals(input[i + 1])) {
        	return false;
        }
    }

    return true;
}
Patrick13
()
Ответ на: комментарий от Patrick13

Вот блин, как я усложнил почти этот же алгоритм.

kalterfive ★★
() автор топика
public boolean eq(String[] input) {
    final int length = input.length;
    for (int i = 1; i < length; i++) {
        if (!input[i].equals(input[i-1])) {
            return false;
        }
    }

    return true;
}
Psych218 ★★★★★
()

каждую строку сравнить со всеми последующими

Очевидно, для

На выходе true если все строки равны

достаточно только первую сравнить со всеми последующими.

SystemD-hater
()

Кто может предложить метод лучше?

поXORить всю матрицу на первый элемент
не вдаваясь в подробности реализации:
return sum(xor_array(input[0],input)) == 0 ? true : false;

anTaRes ★★★★
()

Посчитать хеши от всех входных строк. Попутно складывая строки в map. Если в мапе такой хеш уже есть, то прерваться с результатом false.

andreyu ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.