2013-08-08 2 views
0

Мне было дано следующее упражнение, но я не могу заставить его работать.Как удалить дубликаты из строки, за исключением первого появления

//Remove duplicate characters in a 
// given string keeping only the first occurrences. 
// For example, if the input is ‘tree traversal’ 
// the output will be "tre avsl". 
// --------------------- 
var params = 'tree traversal word'; 

var removeDuplicates = function (string) { 
    return string; 
}; 

// This function runs the application 
// --------------------- 
var run = function() { 
    // We execute the function returned here, 
    // passing params as arguments 
    return removeDuplicates; 
}; 

Что я сделал -

var removeDuplicates = function (string) { 

    var word =''; 
    for(var i=0; i < string.length; i++){ 
     if(string[i] == " "){ 
      word += string[i] + " "; 
     } 
     else if(string.lastIndexOf(string[i]) == string.indexOf(string[i])) 
     { 
     word += string[i]; 
     } 
    } 

    return word; 
}; 

Я не разрешается использовать replaceAll и когда я создаю внутренний цикл не работает.

+0

показать код внутренней петли, пожалуйста. –

ответ

0
<script> 

    function removeDuplicates(string) 
    { 
     var result = []; 

     var i = null; 
     var length = string.length; 
     for (i = 0; i < length; i += 1) 
     { 
      var current = string.charAt(i); 

      if (result.indexOf(current) === -1) 
      { 
       result.push(current); 
      } 

     } 

     return result.join(""); 
    } 

    function removeDuplicatesRegex(string) 
    { 
     return string.replace(/(.)(?=\1)/g, ""); 
    } 
    var str = "tree traversal"; 
    alert(removeDuplicates(str)); 
</script> 
+0

Это был ответ, спасибо. – chickenbeef

+0

@ user1645888 Пожалуйста, примите это как правильный ответ. Благодарю. –

0

Прежде всего, функция запуска должна возвращать removeDuplicates(params), верно?

Вы находитесь на правильном пути, но нужно еще раз подумать об этом состоянии:

else if(string.lastIndexOf(string[i]) == string.indexOf(string[i]))

С i = 0 и принимая 'tree traversal word' в качестве примера, lastIndexOf() собирается возвращаться 5 (индекс 2 't'), тогда как indexOf() будет возвращаться 0.

Очевидно, это не то, что вы хотите, потому что 't' еще не добавлено к word (но это повторяющийся символ, это то, что на самом деле испытывает ваше состояние).

Поскольку вы постепенно наращиваете word, подумайте о тестировании, чтобы узнать, существует ли символ string[i] в word уже для каждой итерации цикла for. Если это не так, добавьте его.

(возможно, это будет очень кстати: http://www.w3schools.com/jsref/jsref_search.asp)

Удачи!

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