Кто-нибудь может помочь мне понять, почему я получаю эту ошибку во время выполнения из-за моей проблемы с leetcode? Самый длинный префикс

#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. Пожалуйста, очистите свой ответ, так как его трудно понять.