最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C++實(shí)現(xiàn)LeetCode(676.實(shí)現(xiàn)神奇字典)

 更新時(shí)間:2021年08月09日 15:20:37   作者:Grandyang  
這篇文章主要介紹了C++實(shí)現(xiàn)LeetCode(676.實(shí)現(xiàn)神奇字典),本篇文章通過(guò)簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下

[LeetCode] 676.Implement Magic Dictionary 實(shí)現(xiàn)神奇字典

Implement a magic directory with buildDict, and search methods.

For the method buildDict, you'll be given a list of non-repetitive words to build a dictionary.

For the method search, you'll be given a word, and judge whether if you modify exactly one character into another character in this word, the modified word is in the dictionary you just built.

Example 1:

Input: buildDict(["hello", "leetcode"]), Output: Null
Input: search("hello"), Output: False
Input: search("hhllo"), Output: True
Input: search("hell"), Output: False
Input: search("leetcoded"), Output: False

Note:

  1. You may assume that all the inputs are consist of lowercase letters a-z.
  2. For contest purpose, the test data is rather small by now. You could think about highly efficient algorithm after the contest.
  3. Please remember to RESET your class variables declared in class MagicDictionary, as static/class variables are persisted across multiple test cases. Please see here for more details.

這道題讓我們?cè)O(shè)計(jì)一種神奇字典的數(shù)據(jù)結(jié)構(gòu),里面有一些單詞,實(shí)現(xiàn)的功能是當(dāng)我們搜索一個(gè)單詞,只有存在和這個(gè)單詞只有一個(gè)位置上的字符不相同的才能返回true,否則就返回false,注意完全相同也是返回false,必須要有一個(gè)字符不同。博主首先想到了One Edit Distance那道題,只不過(guò)這道題的兩個(gè)單詞之間長(zhǎng)度必須相等。所以只需檢測(cè)和要搜索單詞長(zhǎng)度一樣的單詞即可,所以我們用的數(shù)據(jù)結(jié)構(gòu)就是根據(jù)單詞的長(zhǎng)度來(lái)分,把長(zhǎng)度相同相同的單詞放到一起,這樣就可以減少搜索量。那么對(duì)于和要搜索單詞進(jìn)行比較的單詞,由于已經(jīng)保證了長(zhǎng)度相等,我們直接進(jìn)行逐個(gè)字符比較即可,用cnt表示不同字符的個(gè)數(shù),初始化為0。如果當(dāng)前遍歷到的字符相等,則continue;如果當(dāng)前遍歷到的字符不相同,并且此時(shí)cnt已經(jīng)為1了,則break,否則cnt就自增1。退出循環(huán)后,我們檢測(cè)是否所有字符都比較完了且cnt為1,是的話則返回true,否則就是跟下一個(gè)詞比較。如果所有詞都比較完了,則返回false,參見(jiàn)代碼如下:

解法一:

class MagicDictionary {
public:
    /** Initialize your data structure here. */
    MagicDictionary() {}
    
    /** Build a dictionary through a list of words */
    void buildDict(vector<string> dict) {
        for (string word : dict) {
            m[word.size()].push_back(word);
        }
    }
    
    /** Returns if there is any word in the trie that equals to the given word after modifying exactly one character */
    bool search(string word) {
        for (string str : m[word.size()]) {
            int cnt = 0, i = 0;
            for (; i < word.size(); ++i) {
                if (word[i] == str[i]) continue;
                if (word[i] != str[i] && cnt == 1) break; 
                ++cnt;
            }
            if (i == word.size() && cnt == 1) return true;
        }
        return false;
    }

private:
    unordered_map<int, vector<string>> m;
};

下面這種解法實(shí)際上是用到了前綴樹(shù)中的search的思路,但是我們又沒(méi)有整個(gè)用到prefix tree,博主感覺(jué)那樣寫(xiě)法略復(fù)雜,其實(shí)我們只需要借鑒一下search方法就行了。我們首先將所有的單詞都放到一個(gè)集合中,然后在search函數(shù)中,我們遍歷要搜索的單詞的每個(gè)字符,然后把每個(gè)字符都用a-z中的字符替換一下,形成一個(gè)新詞,當(dāng)然遇到本身要跳過(guò)。然后在集合中看是否存在,存在的話就返回true。記得換完一圈字符后要換回去,不然就不滿足只改變一個(gè)字符的條件了,參見(jiàn)代碼如下:

解法二:

class MagicDictionary {
public:
    /** Initialize your data structure here. */
    MagicDictionary() {}
    
    /** Build a dictionary through a list of words */
    void buildDict(vector<string> dict) {
        for (string word : dict) s.insert(word);
    }
    
    /** Returns if there is any word in the trie that equals to the given word after modifying exactly one character */
    bool search(string word) {
        for (int i = 0; i < word.size(); ++i) {
            char t = word[i];
            for (char c = 'a'; c <= 'z'; ++c) {
                if (c == t) continue;
                word[i] = c;
                if (s.count(word)) return true;
            }
            word[i] = t;
        }
        return false;
    }
    
private:
    unordered_set<string> s;
};

類似題目:

Implement Trie (Prefix Tree)

參考資料:

https://discuss.leetcode.com/topic/103004/c-clean-code

https://discuss.leetcode.com/topic/102992/easy-14-lines-java-solution-hashmap

到此這篇關(guān)于C++實(shí)現(xiàn)LeetCode(676.實(shí)現(xiàn)神奇字典)的文章就介紹到這了,更多相關(guān)C++實(shí)現(xiàn)實(shí)現(xiàn)神奇字典內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • cocos2dx實(shí)現(xiàn)橡皮擦效果以及判斷是否擦除完畢

    cocos2dx實(shí)現(xiàn)橡皮擦效果以及判斷是否擦除完畢

    這篇文章主要為大家詳細(xì)介紹了cocos2dx實(shí)現(xiàn)橡皮擦效果以及判斷是否擦除完畢,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-12-12
  • C++ 打開(kāi)選擇文件夾對(duì)話框選擇目錄的操作

    C++ 打開(kāi)選擇文件夾對(duì)話框選擇目錄的操作

    這篇文章主要介紹了C++ 打開(kāi)選擇文件夾對(duì)話框選擇目錄的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2021-01-01
  • C語(yǔ)言數(shù)據(jù)結(jié)構(gòu)之算法的時(shí)間復(fù)雜度

    C語(yǔ)言數(shù)據(jù)結(jié)構(gòu)之算法的時(shí)間復(fù)雜度

    這篇文章主要介紹了C語(yǔ)言數(shù)據(jù)結(jié)構(gòu)之算法的時(shí)間復(fù)雜度,文章基于c語(yǔ)言的相關(guān)資料展開(kāi)詳細(xì)介紹,具有一定的參價(jià)值,需要的小伙伴可以參考一下
    2022-05-05
  • C/C++編程中const的使用詳解

    C/C++編程中const的使用詳解

    這篇文章主要為大家詳細(xì)介紹了C/C++編程中const的使用,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助
    2022-03-03
  • 詳解Matlab中自帶的Java操作合集

    詳解Matlab中自帶的Java操作合集

    其實(shí)Matlab中也有一些自帶的Java操作,例如:獲取鼠標(biāo)在全屏位置、獲取當(dāng)前剪切板內(nèi)容、獲取鼠標(biāo)處像素顏色等,本文總結(jié)了七個(gè)這樣的操作,感興趣的可以了解一下
    2022-03-03
  • C語(yǔ)言+EasyX實(shí)現(xiàn)數(shù)字雨效果

    C語(yǔ)言+EasyX實(shí)現(xiàn)數(shù)字雨效果

    這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言+EasyX實(shí)現(xiàn)數(shù)字雨效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-11-11
  • C++新特性詳細(xì)分析基于范圍的for循環(huán)

    C++新特性詳細(xì)分析基于范圍的for循環(huán)

    C++11這次的更新帶來(lái)了令很多C++程序員期待已久的for?range循環(huán),每次看到j(luò)avascript,?lua里的for?range,心想要是C++能有多好,心里別提多酸了。這次C++11不負(fù)眾望,再也不用羨慕別家人的for?range了。下面看下C++11的for循環(huán)的新用法
    2022-04-04
  • c++中的前向聲明用法解讀

    c++中的前向聲明用法解讀

    這篇文章主要介紹了c++中的前向聲明用法解讀,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-06-06
  • c語(yǔ)言實(shí)現(xiàn)php的trim標(biāo)簽

    c語(yǔ)言實(shí)現(xiàn)php的trim標(biāo)簽

    本文給大家介紹的是使用C語(yǔ)言實(shí)現(xiàn)php的trim標(biāo)簽功能的代碼,非常的實(shí)用,其主要作用是清除字符串開(kāi)頭結(jié)尾除空白,有需要的小伙伴可以參考下。
    2016-01-01
  • C++中的數(shù)組、鏈表與哈希表

    C++中的數(shù)組、鏈表與哈希表

    這篇文章主要介紹了C++中的數(shù)組、鏈表與哈希表,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-09-09

最新評(píng)論

清河县| 阜新市| 大兴区| 若羌县| 裕民县| 辰溪县| 麻栗坡县| 呼玛县| 枝江市| 景泰县| 逊克县| 尚志市| 德清县| 丘北县| 惠水县| 巢湖市| 都江堰市| 岳阳市| 简阳市| 岗巴县| 榆社县| 本溪| 南宫市| 馆陶县| 行唐县| 淅川县| 本溪| 临湘市| 武川县| 屏东市| 吉木萨尔县| 含山县| 河间市| 抚宁县| 宣城市| 申扎县| 宣武区| 三门峡市| 扎兰屯市| 德阳市| 襄樊市|