#javascript #algorithm #logic
#javascript #алгоритм #Логические
Вопрос:
Я отрабатываю проблемы с Leetcode для предстоящего собеседования, я решаю проблему с самым длинным префиксом, и когда я запускаю код с предустановкой, я прохожу все тесты, но когда я отправляю код для прохождения, я получаю ошибку времени выполнения. Вот код, который я написал ниже.
/**
* @param {string[]} strs
* @return {string}
*/
var longestCommonPrefix = function(strs) {
let splitWords = [];
let commonPrefix =[];
strs.forEach((word,i) =>{
splitWords[i] = word.split('');
})
if( splitWords !== undefined || splitWords.length > 0){
for(i=0; i < splitWords[0].length; i ){
if(splitWords[0][i] == splitWords[1][i] amp;amp; splitWords[0][i] == splitWords[2][i]){
commonPrefix.push(splitWords[0][i])
console.log(commonPrefix)
}else{
break;
}
}
}
return (commonPrefix === undefined || commonPrefix.length == 0 ? commonPrefix = "" : commonPrefix.join(''))
};
Вот ошибка, которую я получаю при отправке:
Line 12 in solution.js
for(i=0; i < splitWords[0].length; i ){
^
TypeError: Cannot read property 'length' of undefined
Line 12: Char 32 in solution.js (longestCommonPrefix)
Line 33: Char 19 in solution.js (Object.<anonymous>)
Line 16: Char 8 in runner.js (Object.runner)
Line 24: Char 26 in solution.js (Object.<anonymous>)
Line 1200: Char 30 in loader.js (Module._compile)
Line 1220: Char 10 in loader.js (Object.Module._extensions..js)
Line 1049: Char 32 in loader.js (Module.load)
Line 937: Char 14 in loader.js (Function.Module._load)
at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:71:12)
Line 17: Char 47 in run_main_module.js
Опять же, он работает / проходит, когда я запускаю его с тестом, когда я отправляю его, код завершается с ошибкой. Я не уверен, какие входные данные также пытается ввести алгоритм, но я думаю, что это пустой массив?
Я знаю, что могу просто найти ответ, но я пытаюсь полностью решить проблему, не просматривая ее.
//»Последний выполненный ввод []»
Комментарии:
1. это пустой массив. сделайте проверку strs.length перед функцией. если равно 0, то верните 0.
Ответ №1:
Если вы посмотрите на ограничения проблемы с Leetcode, вы можете увидеть, что в массиве может быть пустая строка strs
.
0 <= strs[i].length <= 200
Например, вы можете иметь Input: strs = ["","flow","flight"]
.
При том, как вы перебираете strs
массив, разделение каждой строки и добавление их в splitWords
массив приведет к следующему результату:
0: []
1: (5) ["f", "l", "o", "w"]
2: (5) ["f", "l", "i", "g", "h", "t"]
Отсутствие проверки на наличие пустой строки приведет к тому, что ваш цикл for попытается получить доступ length
к первому значению пустого массива, которое не определено.
Комментарии:
1. Спасибо, вы можете объяснить, как это работает? я не понимаю ограничений, написанных так: «0 <= strs[i].длина <= 200»
2. Привет! Вы бы читали ограничения так же, как читали бы код.
strs[i]
указывает «для каждого элемента в массиве»..length
добавленный будет означать «длину для каждого элемента в массиве». Слева вы увидите, что значения должны быть больше или равны 0. Справа вы увидите, что значения должны быть меньше или равны 200. Соедините все это вместе, и вы получитеthe length for every item in the array can be greater than or equal to 0 and less than or equal to 200
Ответ №2:
- входные параметры
[]
,splitWords
значение инициализации[]
, - тогда
splitWords !== undefined
верно, splitWords[0].length
значит([])[0].length
, очевидно([])[0]
, не определено.
Комментарии:
1. Пожалуйста, очистите свой ответ, так как его трудно понять.