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

    参考

  • 相关阅读:
    在一台Linux服务器上安装多个MySQL实例(二)--使用单独的MySQL配置文件
    在一台Linux服务器上安装多个MySQL实例(一)--使用mysqld_multi方式
    MySQL复制(四)--多源(主)复制
    MySQL复制(三)--基于全局事物标识符(GTID)配置复制
    类加载机制详解
    字符串常量池理解
    JVM内存模型
    Java设计模式之单例模式
    forkjoin及其性能分析,是否比for循环快?
    集合排序Comparable和Comparator有什么区别?
  • 原文地址:https://www.cnblogs.com/learning-c/p/9859158.html
Copyright © 2011-2022 走看看