2015-11-03 2 views
2

Я практикую проблемы с алгоритмом и пытаюсь удалить данные буквы из строки в o (n) времени.удаление символов из строки - алгоритм javascript

Моя попытка ниже неправильно в несколько способов:

  • последний индекс в массиве outputString «не определен», и я не знаю, почему.
  • Мой вывод - это правильная буква, но она возвращается для длины исходной строки.

Как это исправить и почему возникают эти ошибки?

function removeChars(lettersToDelete, string) { 
    var flags = {}; // a hash of letters to delete. 
    var outputString = string.split(""); 
    var lettersToDelete = lettersToDelete.split(""); 
    var i, j; 

    for (i = 0; i < lettersToDelete.length; i++) { 
     flags[lettersToDelete[i]] = true; 
    } 
    console.log(flags); 

    for (var j = 0; j < string.length; j++) { 
     if (flags[string[j]]) { 
      outputString[j++] = string[j]; 
     } 
    } 
    console.log(outputString); //[ 'a', 'a', 'a', 'a', undefined ] 

    return outputString.join(""); // 'aaaa' 
} 
+0

_If вы want_, вы можете использовать регулярные выражения. 'var regex = новый RegExp (" ["+ lettersToDelete +"] ", 'g'); var outputString = string.replace (regex, ''); ' – Tushar

+1

приятно слушать, кто-то пытается учиться 1+ –

+0

То, как вы манипулируете' j', не выглядит правильным. Также ваша переменная 'outputString' инициализируется как массив, содержащий все буквы исходного ввода, и вы никогда ничего не удаляете из этого массива. Наконец, условие оператора if внутри цикла проверяет, следует ли удалять текущую букву, но не следует ли проверять, следует ли * сохранить * текущую букву? – nnnnnn

ответ

1

function removeChars(lettersToDelete, string) { 
 
     var flags = {}; // a hash of letters to delete. 
 
     var outputString = []; //string.split(""); 
 
     var lettersToDelete = lettersToDelete.split(""); 
 
     var i, j; 
 
     for (i = 0; i < lettersToDelete.length; i++) { 
 
      flags[lettersToDelete[i]] = true; 
 
     } 
 
     for (var j = 0; j < string.length; j++) { 
 
      if (!flags[string[j]]) { 
 
       outputString.push(string[j]); 
 
      } 
 
     } 
 
     console.log(outputString); 
 
     return outputString.join(""); // 'aaaa' 
 
    } 
 
    removeChars("itu", "mitul");

+0

Он вернет «мл», а длина «outputstring» будет равна 2 – Mitul

+0

, не отправляясь в .push() как должное после этого. ура – devdropper87

Смежные вопросы