Страницы

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

понедельник, 26 ноября 2018 г.

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

Суть задачи:
Найти повторяющиеся элементы в строке и изменить их. А те элементы которые не повторяются тоже изменить.
Например все неповторяющиеся элементы заменить на (, а повторяющиеся на )
Таким образом строка seven, должна превратиться в строку ()()(
's' => '(' // неповторяющийся 'e' => ')' // повторяющийся 'v' => '(' // неповторяющийся 'e' => ')' // повторяющийся 'n' => '(' // неповторяющийся
Я пытался сделать задачу через регулярные выражение - не получилось, опыта в этом нет.
Через два цикла for тоже не получилось. Не могу сделать проверку. Буду рад помощи.


Ответ

Спасибо Алексею за наводку как решить задачу. Собственно выкладываю само решение задачи
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) ? '(' : ')'); }

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

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