Skip to content

Instantly share code, notes, and snippets.

@farukcan
Created July 25, 2024 13:31
Show Gist options
  • Save farukcan/e28a5a6da1f92f28e146767ce40c6495 to your computer and use it in GitHub Desktop.
Save farukcan/e28a5a6da1f92f28e146767ce40c6495 to your computer and use it in GitHub Desktop.
Trie Bad Word Filter

TrieNode ve Trie Sınıfları

Ö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;
    }
}

Kötü Kelime Filtresi

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;
    }
}

Kullanım

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.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment