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.
知识点:set的使用,set.insert();
代码1:
class MagicDictionary {
public:
/** Initialize your data structure here. */
unordered_set<string> words;
MagicDictionary() {
}
/** Build a dictionary through a list of words */
void buildDict(vector<string> dict) {
//dic.insert(dic.begin(),dict.begin(),dict.end());
for (string &s:dict) words.insert(s);
}
/** 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 (int i = 0; i < word.size(); i++) {
char c = word[i];
for (int j = 0; j < 26; j++) {
if (c == j+'a') continue;
word[i] = j+'a';
if (words.count(word)) return true;
}
word[i] = c;
}
return false;
}
};
/**
* Your MagicDictionary object will be instantiated and called as such:
* MagicDictionary obj = new MagicDictionary();
* obj.buildDict(dict);
* bool param_2 = obj.search(word);
*/
代码2:
class MagicDictionary {
public:
set<string> dic;
/** Initialize your data structure here. */
MagicDictionary() {
}
/** Build a dictionary through a list of words */
void buildDict(vector<string> dict) {
dic.insert(dict.begin(),dict.end());
}
/** 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 s:dic){
if(s.size()==word.size()){
int flag=0;
for(int i=0;i<s.size();i++){
if(s[i]!=word[i]){flag++;}
if(flag>1){break;}
}
if(flag==1){return true;}
}
}
return false;
}
};
/**
* Your MagicDictionary object will be instantiated and called as such:
* MagicDictionary obj = new MagicDictionary();
* obj.buildDict(dict);
* bool param_2 = obj.search(word);
*/
代码3:
class MagicDictionary {
public:
vector<string> dict;
/** Initialize your data structure here. */
MagicDictionary() {
}
/** Build a dictionary through a list of words */
void buildDict(vector<string> dict) {
this->dict = dict;
}
/** 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:dict){
if(judge(str,word)) return true;
}
return false;
}
bool judge(string str, string word){
if(str.length() != word.length()) return false;
int count = 0;
for(int i=0; i<str.length(); i++){
if(str[i] != word[i]) count++;
}
return count == 1? true: false;
}
};
/**
* Your MagicDictionary object will be instantiated and called as such:
* MagicDictionary obj = new MagicDictionary();
* obj.buildDict(dict);
* bool param_2 = obj.search(word);
*/