Напишите функцию, чтобы найти самую длинную строку массива общего префикса.
Если нет общего префикса, возвращается пустая строка «»
Пример 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]; }
Первым, чтобы сделать это самостоятельно. ,