У меня проблема, и я не могу найти решение прямо сейчас.
У меня есть такая строка: «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");
Но это все еще не работает, здесь все еще есть дубликаты.
Что вы узнали во время отладки?
С !wordCounts[replacement] в качестве условия результат этой функции сильно зависит от того, что делает generateTags. Без его реализации, что вы ожидаете, что мы скажем?
Функция generateTags генерирует случайный текст, пример ajss kdjf rufj и т. д.
Что, если вы вводите слово "aa", повторенное 27 раз? Ожидаете ли вы, что генератор случайных чисел заменит остальные 26 экземпляров на "bb" или попытается перебрать все строчные буквы? Если ожидается последний случай, чем следует заменить последний экземпляр, поскольку в этот момент все строчные буквы будут исчерпаны?
Что вы можете сделать, так это создать список при проверке дубликатов, а затем снова соединить его в строку:
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) за счет игнорирования константы
Можете ли вы предоставить какой-либо значимый ввод/вывод, uyti lksh bxnm это бесполезно.