Самый быстрый способ проверить, сколько слов в строковом массиве находится в правильном месте - PullRequest
0 голосов
/ 15 октября 2018

У меня есть строка:

The quick brown fox jumps over the lazy dog

И случайный метод, который смешивает эти слова в массиве.

brown jumps over The lazy fox quick the dog

Какой самый быстрый способ проверить, какие слова находятся в правильном месте, используя java или kotlin?

РЕДАКТИРОВАТЬ

Я имею в виду Correct mutual order

Ответы [ 3 ]

0 голосов
/ 15 октября 2018

Самый быстрый способ в Java, вероятно, использует HashMap для хранения каждого слова в предложении.Вы хотели бы использовать слово в качестве ключа и место в предложении в качестве значения .Для этого потребуется 1 проход исходного предложения (операция O (n)).

Поскольку слова могут появляться дважды, вы можете создать List слов.

Это решение должноработать на любое предложение.Если вы заботитесь только об этом конкретном предложении, вы можете использовать цикл for и сравнить значения индекса массива.

0 голосов
/ 15 октября 2018

В Kotlin, если:

val str = "The quick brown fox jumps over the lazy dog"
val list = str.split(" ")

val strShuffled = "over jumps brown The lazy fox quick the dog"
val listShuffled = strShuffled.split(" ")

, тогда:

val listMatching = list.filterIndexed { index, s ->  s.equals(listShuffled[index])}

println(listMatching.size)
println(listMatching)

напечатает2 [brown, dog]

Приведенный выше код фильтрует только те элементы из списка, которые совпадают с элементом в перетасованном списке в той же позиции, и подсчитывает размер отфильтрованного списка.

0 голосов
/ 15 октября 2018

Одно решение будет сравнивать оригинал с новым массивом, возвращаемым из метода.

    String[] original = {"The", "quick", "Brown", "fox", "jumps", "over", "the", "lazy", "dog"};
    String[] mixed = mixArray(original);
    ArrayList<String> sameOrder = new ArrayList<>();
    int wordsInTheSameOrder = 0;
    for(int i = 0; i < original.length; i++) {
        if(original[i].equals(mixed[i])) {
            sameOrder.add(original[i]);
            wordsInTheSameOrder++;
        }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...