Algorithm-week3

来源:互联网 发布:wifi电话软件下载 编辑:程序博客网 时间:2024/06/07 17:52

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") -> falsesearch("bad") -> truesearch(".ad") -> truesearch("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的题到后期进行挑战。



原创粉丝点击