Самый длинный общий префикс Leetcode

Мне трудно следовать этому решению. Я понимаю, что мы устанавливаем префикс и прокручиваем оставшуюся часть массива и продолжаем обрезать префикс до тех пор, пока префикс полностью не будет существовать в каждой строке, но почему мы делаем strs[i].indexOf(output) != 0 в цикле while?

public String longestCommonPrefix(String[] strs) {
    if (strs.length == 0) {
        return "";
    }
    String output = strs[0];
    for(int i = 1; i < strs.length; i++) {
        while(strs[i].indexOf(output) != 0) {
            output = output.substring(0, output.length() - 1);
        }
    }
    return output;
}

Вот что рубит. Он удаляет символы с конца output по одному, пока strs[i].indexOf(output) != 0 не станет false (strs[i] начинается с output), затем он должен делать то же самое для каждой строки, чтобы убедиться, что получен фактический общий префикс. Вы читали документацию по различным методам здесь? Это похоже на то, что будет покрыто этим.

Jesse 21.11.2022 22:04

Не могли бы вы добавить сюда контекст? К чему относится «это решение»? Не могли бы вы дать ссылку на проблему (если она находится на общедоступном веб-сайте) или переформулировать проблему в вопросе?

halfer 24.11.2022 23:59
LeetCode запись решения 2536. Увеличение подматриц на единицу
LeetCode запись решения 2536. Увеличение подматриц на единицу
Увеличение подматриц на единицу - LeetCode
Версия Java на основе версии загрузки
Версия Java на основе версии загрузки
Если вы зайдете на официальный сайт Spring Boot , там представлен start.spring.io , который упрощает создание проектов Spring Boot, как показано ниже.
Документирование API с помощью Swagger на Springboot
Документирование API с помощью Swagger на Springboot
В предыдущей статье мы уже узнали, как создать Rest API с помощью Springboot и MySql .
Как включить TLS в gRPC-клиенте и сервере : 2
Как включить TLS в gRPC-клиенте и сервере : 2
Здравствуйте! 🙏🏻 Надеюсь, у вас все хорошо и добро пожаловать в мой блог.
Сортировка hashmap по значениям
Сортировка hashmap по значениям
На Leetcode я решал задачу с хэшмапой и подумал, что мне нужно отсортировать хэшмапу по значениям.
3
2
53
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Гораздо более понятным (и эффективным) было бы использование «не startWith».

    while (!strs[i].startsWith(output)) {
        output = output.substring(0, output.length() - 1);
    }

IndexOf также будет искать в других позициях подстроку, равную output.

Это было бы более читабельно, поскольку «пока strs[i] не начинается с префикса, укоротите префикс на 1. Пустой префикс (output) выйдет из цикла. (Вы также можете выйти из цикла for.)

!= 0 означает, что строка префикса не начиналась в начале строки. Если индекс > 0 был дальше в строке. Если это было -1, то его вообще не было в строке. Если бы это было == 0, оно началось с самого начала.

Обратите внимание, что цикл while продолжает резервное копирование с использованием substring до тех пор, пока префикс не совпадет с началом. Затем он выходит из цикла while. Затем он продолжает проверять, содержит ли следующая строка первую, и выполняет резервное копирование до тех пор, пока они не получат одинаковый префикс. Это продолжается до тех пор, пока не будет возвращен либо самый длинный общий префикс, либо пустая строка.

Другие вопросы по теме