Название статьи lettcode

Напишите функцию, чтобы найти самую длинную строку массива общего префикса.

Если нет общего префикса, возвращается пустая строка «»

Пример 1:

Входные данные : [ "цветок", "текут ", "рейс"]
Выход: "П"
Пример 2:

Входной данные : [ «собака», «гоночный автомобиль », «автомобиль»]
Вывод: «»
Объяснение: нет ввода общего префикса.
Описание:

Все входные содержит только строчные буквы Аз.

Источник: пребывание кнопка (LeetCode)
ссылка: https: //leetcode-cn.com/problems/longest-common-prefix
авторского права вычета из всех сетей. Коммерческая перепечатка пожалуйста , свяжитесь с уполномоченным должностным лицом, некоммерческим оттиском пожалуйста , укажите источник.

общественности  статической    строка прибудет (String [] СПО) {
         если (strs.length == 0 ) {
             возвращение "" ;
        }
        если (strs.length == 1 ) {
             возврата СПО [0 ];
        }
        Строка тоскует = «» ;
        HashMap <Integer, String> firstMap = новый HashMap <> ();

        HashMap <Integer, String> secondMap = новый HashMap <> ();
        Строковые сек = СПО [0 ];
        Строка [] сплит = ДЕЛЕНИЕ ( "" );
        для ( Int I = 0, я <split.length; я ++ ) {
            firstMap.put (я, сплит [I]);
        }
        для ( Int я = 1; I <strs.length; я ++ ) {
            String String = STRs [I];
            Строка [] split1 = String.split ( "" );
            HashMap <Integer, String> tempMap = новый HashMap <> ();
            для ( INT J = 0; J <split1.length; j ++ ) {
                 если (firstMap.size () <J + 1 ) {
                     продолжить ;
                }
                если (firstMap.get (J) .equals (split1 [J])) {
                    tempMap.put (J, split1 [J]);
                   продолжить ;
                } Еще {
                     перерыва ;
                }
            }
            firstMap = tempMap;
            если (я == strs.length -1 ) {
                secondMap = tempMap;
            }
        }
        если (secondMap.size () == 0 ) {
             возвращение "" ;
        }
        для ( Int I = 0; я <secondMap.size (); я ++ ) {
            лонги + = secondMap.get (я);
        }
        вернуться тоскует;
    }

Официальное решение проблем:

алгоритм

Представьте себе конец массива имеет очень короткую строку, используя данный метод все еще будет S S сравнения. Способ оптимизации таких случаев является горизонтальной разверткой. Каждая колонка спереди назад Перечислим строк, каждая из сравнения строк первого столбца одного и того же характера (что является предметом одного и того же символа в различной последовательности), а затем сравнить следующий столбец.

Строка longestCommonPrefix общественности (String [] СПО) {
    если (Strs == NULL || strs.length == 0) возвращение "";
    для (INT I = 0; I <STRs [0] .length (); я ++) {
        символ с = СПО [0] .charAt (я);
        для (Int J = 1, J <strs.length; j ++) {
            если (I == СПО [у] .Length () || СПО [J] .charAt (я)! = с)
                возвратные СПО [0] .substring (0, I);             
        }
    }
    возвратные СПО [0];
}

  Первым, чтобы сделать это самостоятельно. ,

рекомендация

отwww.cnblogs.com/prader6/p/12081530.html