Öncelikle, daha önce tanımladığımız TrieNode ve Trie sınıflarını kullanacağız.
class TrieNode {
constructor() {
this.children = {};
this.isEndOfWord = false;
}
}
class Trie {
constructor() {
this.root = new TrieNode();
}
insert(word) {
let node = this.root;
for (let char of word) {
if (!node.children[char]) {
node.children[char] = new TrieNode();
}
node = node.children[char];
}
node.isEndOfWord = true;
}
search(word) {
let node = this.root;
for (let char of word) {
if (!node.children[char]) {
return false;
}
node = node.children[char];
}
return node.isEndOfWord;
}
startsWith(prefix) {
let node = this.root;
for (let char of prefix) {
if (!node.children[char]) {
return false;
}
node = node.children[char];
}
return true;
}
}
Trie yapısını kullanarak kötü kelimeleri tespit edip sansürleyecek bir filtre fonksiyonu yazalım.
class BadWordFilter {
constructor() {
this.trie = new Trie();
}
addBadWord(word) {
this.trie.insert(word);
}
censor(text) {
let result = "";
let i = 0;
while (i < text.length) {
let node = this.trie.root;
let j = i;
let lastMatchEnd = -1;
while (j < text.length && node.children[text[j]]) {
node = node.children[text[j]];
if (node.isEndOfWord) {
lastMatchEnd = j;
}
j++;
}
if (lastMatchEnd !== -1) {
result += "*".repeat(lastMatchEnd - i + 1);
i = lastMatchEnd + 1;
} else {
result += text[i];
i++;
}
}
return result;
}
}
Kötü kelime filtresini oluşturup kullanarak metindeki kötü kelimeleri sansürleyebiliriz.
// Kötü kelime filtresi oluşturma
const filter = new BadWordFilter();
// Kötü kelimeleri ekleme
filter.addBadWord("bad");
filter.addBadWord("ugly");
filter.addBadWord("dumb");
// Metni sansürleme
const text = "This is a bad and ugly world with some dumb people.";
const censoredText = filter.censor(text);
console.log(censoredText); // "This is a *** and **** world with some **** people."
Bu örnekte, BadWordFilter
sınıfı kullanarak kötü kelimeleri Trie yapısına ekledik ve censor
fonksiyonunu kullanarak metindeki kötü kelimeleri sansürledik. Bu sayede metindeki kötü kelimeler, yıldızlarla değiştirilerek sansürlenmiş oldu.