Leetcode 211. Add and Search Word - Data structure design

Design a data structure that supports the following two operations:
void addWord(word)
bool search(word)
search(word) can search a literal word or a regular expression string containing only letters a-z or .. A . means it can represent any one letter.

For example:
addWord("bad")
addWord("dad")
addWord("mad")
search("pad") -> false
search("bad") -> true
search(".ad") -> true
search("b..") -> true

思路:
如果去掉了特殊字符.就是一道典型的trie樹(shù)解法題目,所以關(guān)鍵是如何解決特殊字符.的情況。
自己第一次想的是益涧,每次add一個(gè)字符的時(shí)候同樣add一個(gè).字符颖御,即把.當(dāng)做第27個(gè)字符來(lái)看待,但是增加第一個(gè).字符之后纠俭,如何解決后續(xù)字符在.節(jié)點(diǎn)的分支是個(gè)問(wèn)題,同樣在搜索的方法實(shí)現(xiàn)上也很復(fù)雜,自己沒(méi)有想清楚怎么解決灶轰。
因此另一種實(shí)現(xiàn)方法,就是暴力的刷钢,如果遇見(jiàn)了.笋颤,則在當(dāng)前節(jié)點(diǎn)的所有子節(jié)點(diǎn)進(jìn)行搜索,如果字符串很長(zhǎng)内地,并且trie樹(shù)很茂盛伴澄,時(shí)間復(fù)雜度會(huì)很高,但是被accepted了阱缓!

class WordDictionary {

class TrieNode {
    public boolean isWord;
    public TrieNode[] children;
    public TrieNode() {
        this.isWord = false;
        this.children = new TrieNode[26];
    }
}

TrieNode root;

public WordDictionary() {
    this.root = new TrieNode();
}

/** Adds a word into the data structure. */
public void addWord(String word) {
    TrieNode dummy = this.root;
    for (int i = 0; i < word.length(); i++) {
        char c = word.charAt(i);
        if (dummy.children[c - 'a'] == null) {
            dummy.children[c - 'a'] = new TrieNode();
        }
        dummy = dummy.children[c - 'a'];
    }
    dummy.isWord = true;
}

/** Returns if the word is in the data structure. A word could contain the dot character '.' to represent any one letter. */
public boolean search(String word) {
    return this._searchHelper(word, 0, this.root);
}

private boolean _searchHelper(String word, int pos, TrieNode node) {
    if (pos == word.length()) {
        return node.isWord;
    }

    char c = word.charAt(pos);
    if (word.charAt(pos) != '.') {
        if (node.children[c - 'a'] == null) {
            return false;
        }
        return _searchHelper(word, pos + 1, node.children[c - 'a']);
    } else {
        for (int i = 0; i < 26; i++) {
            if (node.children[i] != null && _searchHelper(word, pos + 1, node.children[i])) {
                return true;
            }
        }
        return false;
    }
}

}

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末非凌,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子荆针,更是在濱河造成了極大的恐慌敞嗡,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,122評(píng)論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件航背,死亡現(xiàn)場(chǎng)離奇詭異喉悴,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)玖媚,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,070評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén)箕肃,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人今魔,你說(shuō)我怎么就攤上這事勺像≌厦常” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 164,491評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵吟宦,是天一觀的道長(zhǎng)篮洁。 經(jīng)常有香客問(wèn)我,道長(zhǎng)督函,這世上最難降的妖魔是什么嘀粱? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,636評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮辰狡,結(jié)果婚禮上锋叨,老公的妹妹穿的比我還像新娘。我一直安慰自己宛篇,他們只是感情好娃磺,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,676評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著叫倍,像睡著了一般偷卧。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上吆倦,一...
    開(kāi)封第一講書(shū)人閱讀 51,541評(píng)論 1 305
  • 那天听诸,我揣著相機(jī)與錄音,去河邊找鬼蚕泽。 笑死晌梨,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的须妻。 我是一名探鬼主播仔蝌,決...
    沈念sama閱讀 40,292評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼荒吏!你這毒婦竟也來(lái)了敛惊?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,211評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤绰更,失蹤者是張志新(化名)和其女友劉穎瞧挤,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體动知,經(jīng)...
    沈念sama閱讀 45,655評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡皿伺,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,846評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了盒粮。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,965評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡奠滑,死狀恐怖丹皱,靈堂內(nèi)的尸體忽然破棺而出妒穴,到底是詐尸還是另有隱情,我是刑警寧澤摊崭,帶...
    沈念sama閱讀 35,684評(píng)論 5 347
  • 正文 年R本政府宣布讼油,位于F島的核電站,受9級(jí)特大地震影響呢簸,放射性物質(zhì)發(fā)生泄漏矮台。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,295評(píng)論 3 329
  • 文/蒙蒙 一根时、第九天 我趴在偏房一處隱蔽的房頂上張望瘦赫。 院中可真熱鬧,春花似錦蛤迎、人聲如沸确虱。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,894評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)校辩。三九已至,卻和暖如春辆童,著一層夾襖步出監(jiān)牢的瞬間宜咒,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,012評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工把鉴, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留故黑,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,126評(píng)論 3 370
  • 正文 我出身青樓纸镊,卻偏偏與公主長(zhǎng)得像倍阐,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子逗威,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,914評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容