Найти и заменить дубликаты в строке

У меня проблема, и я не могу найти решение прямо сейчас.

У меня есть такая строка: «abcd dfeg uyti lksh bxnm abcd uyti».

И я хочу заменить дубликаты другим текстом (я использую функцию для генерации случайных букв).

Но есть проблема, что новый текст генерируется заранее.

ПРИМЕР ВВОДА "aaaa bbbb cccc bbbb cccc dddd eeee"

Мой вывод выглядит так: «аааа bbbb cccc аааа eeee dddd eeee». что неправильно

Но результат, который я хочу, выглядит так: «aaaa bbbb cccc ffff gggg dddd eeee»

Я попробовал этот код

function formatTEXT(text) {
    let words = text.split(" ");
    let replaced = new Set();
    let duplicatesFound = true;
    while (duplicatesFound) {
        const wordCounts = {};
        duplicatesFound = false;
        for (let i = 0; i < words.length; i++) {
            const word = words[i];
            if (!wordCounts[word]) {
                wordCounts[word] = 1;
            } else {
                wordCounts[word]++;
            }
        }

        for (let i = 0; i < words.length; i++) {
            let replacement = generateTags(lettersN);
            const word = words[i];
            if (!replaced.has(word) && wordCounts[word] > 1 && !wordCounts[replacement]) {
                words[i] = replacement;
                replaced.add(word);
                duplicatesFound = true;
                console.info(replacement);
            }
        }
    }
    return words.join(" ");
}

formatTEXT("aaaa bbbb cccc bbbb cccc dddd eeee");

Но это все еще не работает, здесь все еще есть дубликаты.

Можете ли вы предоставить какой-либо значимый ввод/вывод, uyti lksh bxnm это бесполезно.

gog 10.01.2023 18:23

Что вы узнали во время отладки?

MrSmith42 10.01.2023 18:28

С !wordCounts[replacement] в качестве условия результат этой функции сильно зависит от того, что делает generateTags. Без его реализации, что вы ожидаете, что мы скажем?

trincot 10.01.2023 19:53

Функция generateTags генерирует случайный текст, пример ajss kdjf rufj и т. д.

Erzen Krasniqi 10.01.2023 21:00

Что, если вы вводите слово "aa", повторенное 27 раз? Ожидаете ли вы, что генератор случайных чисел заменит остальные 26 экземпляров на "bb" или попытается перебрать все строчные буквы? Если ожидается последний случай, чем следует заменить последний экземпляр, поскольку в этот момент все строчные буквы будут исчерпаны?

wLui155 10.01.2023 22:09
Руководство для начинающих по веб-разработке на React.js
Руководство для начинающих по веб-разработке на React.js
Веб-разработка - это захватывающая и постоянно меняющаяся область, которая постоянно развивается благодаря новым технологиям и тенденциям. Одним из...
Калькулятор CGPA 12 для семестра
Калькулятор CGPA 12 для семестра
Чтобы запустить этот код и рассчитать CGPA, необходимо сохранить код как HTML-файл, а затем открыть его в веб-браузере. Для этого выполните следующие...
Как собрать/развернуть часть вашего приложения Angular
Как собрать/развернуть часть вашего приложения Angular
Вам когда-нибудь требовалось собрать/развернуть только часть вашего приложения Angular или, возможно, скрыть некоторые маршруты в определенных средах?
Оптимизация React Context шаг за шагом в 4 примерах
Оптимизация React Context шаг за шагом в 4 примерах
При использовании компонентов React в сочетании с Context вы можете оптимизировать рендеринг, обернув ваш компонент React в React.memo сразу после...
Интервьюер: Почему &apos;[] instanceof Object&apos; возвращает &quot;true&quot;?
Интервьюер: Почему '[] instanceof Object' возвращает "true"?
Все мы знаем, что [] instanceof Array возвращает true, но почему [] instanceof Object тоже возвращает true?
Абстрактное синтаксическое дерево (AST) и как оно работает с ReactJS
Абстрактное синтаксическое дерево (AST) и как оно работает с ReactJS
Абстрактное синтаксическое дерево (AST) - это древовидная структура данных, которая представляет структуру и иерархию исходного кода на языке...
0
5
64
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Что вы можете сделать, так это создать список при проверке дубликатов, а затем снова соединить его в строку:

function formatText(text) {
    let words = text.split(" ");
    var newWords = []
    for (let i in words) {
        if (!newWords.includes(words[i])) {
            newWords.push(words[i])
        }
    }
    return newWords.join(" ")
}

console.info(formatText("aaaa bbbb cccc bbbb cccc dddd eeee"))

Выход: "aaaa bbbb cccc dddd eeee"

Ответ принят как подходящий
function formatText(text) {
  let hashMappedString = text
    .split(' ')
    .reduce((previousState, currentElement) => {
      previousState[currentElement] = currentElement;
      return previousState;
    }, {});
  

  var newWords = '';
  for (let word in hashMappedString) {
    newWords += ` ${word}`;
    console.info(word);
  }
  return newWords.trim(); // to remove the space in the beginning
}
console.info(formatText('aaaa bbbb cccc bbbb cccc dddd eeee')); 

// этот код имеет временную сложность O(n) + O(n), что равно O(2n), что равно O(n) за счет игнорирования константы

Другие вопросы по теме