#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) ? '(' : ')'); }
Комментариев нет:
Отправить комментарий