zoukankan      html  css  js  c++  java
  • 676. Implement magic dictionary

    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.

     解法1

    #include<string>
    #include<vector>
    #include<iostream>
    #include<unordered_map>
    using namespace std;
    class MagicDictionary{
        unordered_map<int,vector<string>> m;
    public:
        MagicDictionary(){
    
        }
        void buildDict(vector<string> dict){
            for(string word: dict){
                m[word.size()].push_back(word);
            }
        }
        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;
        }
    };
    
    int main(){
        MagicDictionary magicDictionary;
        magicDictionary.buildDict({"hello","leetcode"});
        cout<<magicDictionary.search("hello")<<endl;
        cout<<magicDictionary.search("hhllo")<<endl;
        cout<<magicDictionary.search("hell")<<endl;
        cout<<magicDictionary.search("leetcoded")<<endl;
        return 0;
    
    }

     解法2

    #include<string>
    #include<vector>
    #include<iostream>
    #include<unordered_map>
    #include<unordered_set>
    using namespace std;
    class MagicDictionary{
        unordered_set<string> st;
    public:
        MagicDictionary(){
    
        }
        void buildDict(vector<string> dict){
            for(string word: dict){
                st.insert(word);
            }
        }
        bool search(string word){
            for(int i=0;i<word.size();++i){
                char tmp=word[i];
                for(char c='a';c<='z';++c){
                    if(c==tmp)
                        continue;
                    word[i]=c;
                    if(st.find(word)!=st.end()){
                        return true;
                    }
                }
                word[i]=tmp;
            }
            return false;
        }
    };
    
    int main(){
        MagicDictionary magicDictionary;
        magicDictionary.buildDict({"hello","leetcode"});
        cout<<magicDictionary.search("hello")<<endl;
        cout<<magicDictionary.search("hhllo")<<endl;
        cout<<magicDictionary.search("hell")<<endl;
        cout<<magicDictionary.search("leetcoded")<<endl;
        return 0;
    
    }

    参考

  • 相关阅读:
    设计模式7—装饰者模式【结构型】
    设计模式6—命令模式【行为型】
    vue工程类型—vue 多模块、vue多项目集成工程
    设计模式5—迭代器模式【行为型】
    设计模式4—代理模式【结构型】
    设计模式3—策略模式【行为型】
    用户权限管理系统(后台权限管理)
    https原理 及 证书
    设计模式2—单例模式【创建型】
    设计模式1—发布订阅者模式【行为型】
  • 原文地址:https://www.cnblogs.com/learning-c/p/9859158.html
Copyright © 2011-2022 走看看