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; } };
原文地址:https://www.cnblogs.com/ethanhong/p/10208027.html
时间: 2024-10-30 06:47:06