Week3
Program--Medium
Design a data structure that supports the following two operations:
void addWord(word) bool search(word)
search(word) can search a literal word or a regular expression string containing only letters a-z
or .
. A .
means it can represent any one letter.
For example:
addWord("bad") addWord("dad") addWord("mad") search("pad") -> false search("bad") -> true search(".ad") -> true search("b..") -> true
Note:
You may assume that all words are consist of lowercase letters a-z
.
题目解析:
这是一个字符串匹配的题目,但是事先得自己设计一个数据结构易于我们进行字符串匹配。
思路一:在这我直接用了vector进行字符串的储存,不注重数据结构的设计。对于匹配过程,直接对每个词的每一位进行检索,思路简单。
思路二:注重数据结构的设计,设计一颗类似哈夫曼编码树的树,对节点进行位的检索。
下面是针对思路一编写的代码:
代码:
class WordDictionary {
public:
vector<string> data;
/** Initialize your data structure here. */
WordDictionary() {
}
/** Adds a word into the data structure. */
void addWord(string word) {
data.push_back(word);
}
/** Returns if the word is in the data structure. A word could contain the dot character '.' to represent any one letter. */
bool search(string word) {
string::size_type idx;
idx = word.find(".");
bool ifContain;
if (idx == string::npos) {
ifContain = false;
} else {
ifContain = true;
}
for (int i = 1; i < data.size(); i++) {
if (word == data[i]) {
return true;
}
else if (word.length() != data[i].length()) {
continue;
}
else if (ifContain) {
for (int j = 0; j < word.length(); j++) {
if (word[j] == '.') {
continue;
} else if (word[j] == data[i][j]) {
continue;
} else {
break;
}
}
} else {
continue;
}
}
return false;
}
};
/**
* Your WordDictionary object will be instantiated and called as such:
* WordDictionary obj = new WordDictionary();
* obj.addWord(word);
* bool param_2 = obj.search(word);
*/
一周任务:
以后计划每周2-3道Medium,有时间就多刷Easy的题,Hard的题到后期进行挑战。