[leetcode]676. Implement Magic Dictionary
Analysis
年纪大了换季就会感冒—— [ummmm~]
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.
对于查找的目标字符串s,如果在词典中可以找到一个字符串s1跟s只有一个字符不一样,需要注意的是这里s1和s必须长度相等,所以我们查找的时候可以过滤掉所有跟s长度不同的字符串~
Implement
class MagicDictionary {
public:
/** Initialize your data structure here. */
MagicDictionary() {
}
/** Build a dictionary through a list of words */
void buildDict(vector<string> dict) {
for(auto d:dict)
dic[d.size()].push_back(d);
}
/** 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:dic[word.size()]){
int dif = 0;
int i;
for(i=0; i<word.size(); i++){
if(str[i] != word[i]){
if(dif == 1)
break;
dif++;
}
}
if(dif == 1 && i == word.size())
return true;
}
return false;
}
private:
unordered_map<int, vector<string>> dic;
};
/**
* Your MagicDictionary object will be instantiated and called as such:
* MagicDictionary obj = new MagicDictionary();
* obj.buildDict(dict);
* bool param_2 = obj.search(word);
*/