Эта проблема на самом деле не является хорошим кандидатом для рекурсии, но один из способов сделать это - сохранить два набора:
- набор символов, которые встречались только один раз
- набор символов, которые встречались более одного раза
При обработке следующего символа вам необходимо решить, как эти два набора нужно изменить.Когда все символы обработаны, вы возвращаете размер второго набора.
Оба набора инициализируются как пустые наборы:
function countDuplicate(word, once = new Set, more = new Set) {
var check = word[0];
if (!check) return more.size;
if (once.delete(check)) { // If successful, it was present
more.add(check);
} else {
once.add(check);
}
return countDuplicate(word.slice(1), once, more);
}
const result = countDuplicate ('greatestme');
console.log(result);