Задача : Поиск эквивалентных массивов

263
20 декабря 2017, 22:10

Решил такую задачку: на вход метода поступают n массивов строк, нужно определить дубликаты ли эти массивы игнорируя порядок и число объектов. Например массивы {"1", "z"} и {"1", "z", "1", "z", "1", "z", "1"} эквивалентны. А {"1", "z"} и {"0", "z"} нет. {"1", "z"} и {"z"} тоже нет.

мое решение

public static boolean allStringSetsIdentical(String[][] sets) {
        boolean bool = true;
        Set<String> set = new HashSet<>();
        List<String> listOfStrings = null;
        for (String[] s : sets) {
            for (String str : s) {
                set.add(str);
            }
        }
        for (String[] s : sets) {
            listOfStrings = new ArrayList<String>();
            Collections.addAll(listOfStrings, s);
            for (String str : set) {
                if (!listOfStrings.contains(str)) {
                    return false;
                }
            }
        }
        return bool;
    }

прошу подсказать как сделать оптимальной. Спасибо.

Answer 1
public static boolean allStringSetsIdentical(String[][] sets) {
    int maxSize = 0;
    Set<String> set = new HashSet<>();
    for (String[] s : sets) {
        if (s.length>maxSize && new HashSet(Arrays.asList(s)).size()>maxSize) maxSize=s.length;
        Collections.addAll(set, s);
    }
    return set.size()==maxSize;
}

Сет гарантирует уникальность элементов, следовательно, при добавлении всех элементов в него размер сета должен быть равен размеру самого большого массива, тогда и элементы эквиваленты.

READ ALSO
Не переходит по ссылкам тест

Не переходит по ссылкам тест

Есть файл с набором методов для selenium WebDriver на javaИ есть тест

230
Два Navigation Drawer в андроид ява

Два Navigation Drawer в андроид ява

В приложения хочу сделать два Navigation Drawer как в приложении Stack Exchangeесть ли где нибудь тутариулы на эту задачу?

216
Ошибки при создании jar с Maven [cthulhu]

Ошибки при создании jar с Maven [cthulhu]

Хочу запустить и использовать данный проект который предназначен для: установки и запускаapk файлов на множестве подключенных к компьютеру...

230