Страницы

Поиск по вопросам

вторник, 24 декабря 2019 г.

Найти повторяющиеся элементы и изменить их

#javascript #регулярные_выражения


Суть задачи:  

Найти повторяющиеся элементы в строке и изменить их.
А те элементы которые не повторяются тоже изменить.  

Например все неповторяющиеся элементы заменить на (, а повторяющиеся на ).

Таким образом строка seven, должна превратиться в строку ()()(:

's' => '(' // неповторяющийся
'e' => ')' // повторяющийся
'v' => '(' // неповторяющийся
'e' => ')' // повторяющийся
'n' => '(' // неповторяющийся


Я пытался сделать задачу через регулярные выражение - не получилось, опыта в этом нет. 

Через два цикла for тоже не получилось. Не могу сделать проверку.
Буду рад помощи.
    


Ответы

Ответ 1



Спасибо Алексею за наводку как решить задачу. Собственно выкладываю само решение задачи function duplicateEncode(word){ word = word.toLowerCase().split(""); var key = {}, result = ""; for (var i = 0; i < word.length; i++) { if (key[word[i]] == undefined) key[word[i]] = 1; else key[word[i]]++ } for (var k = 0; k < word.length; k++) { if (key[word[k]] == 1) result += "(" ; else result += ")"; } return result } P.S. А вот как решили задачу "большие" дяди. function duplicateEncode(word){ return word .toLowerCase() .split('') .map( function (a, i, w) { return w.indexOf(a) == w.lastIndexOf(a) ? '(' : ')' }) .join(''); } Вариант с регулярным выражением function duplicateEncode(word) { word = word.toLowerCase(); return word.replace(/./g, m => word.indexOf(m) == word.lastIndexOf(m) ? '(' : ')'); }

Комментариев нет:

Отправить комментарий