LC 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:
- You may assume that all the inputs are consist of lowercase letters
a-z
. - For contest purpose, the test data is rather small by now. You could think about highly efficient algorithm after the contest.
- 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.
Runtime: 0 ms, faster than 100.00% of C++ online submissions for Implement Magic Dictionary.
class MagicDictionary {
public:
vector<string> strvec;
explicit MagicDictionary() = default;
void buildDict(const vector<string>& dict) {
strvec = dict;
}
bool search(const string& word) {
for(auto& vs : strvec){
if(vs.size() != word.size()) continue;
int idx = -1;
bool fit = true;
unordered_set<char> s;
for(int i=0; i<word.size(); i++){
s.insert(word[i]);
if(idx == -1 && word[i] != vs[i]) {idx = i;}
else if(idx != -1 && word[i] != vs[i]) {fit = false; break;}
}
if(idx != -1 && fit && s.count(word[idx])) return true;
}
return false;
}
};