leetcode-648. Replace Words

来源:互联网 发布:全国房地产数据服务商 编辑:程序博客网 时间:2024/05/16 01:17

考察点:trie树,指针;
思路:根据dict生成trie树,判断是否是_is_end时需要留意。

C++代码:

class Solution {public:    struct TrieNode{        bool _is_end;        TrieNode * next[26];        TrieNode(){            _is_end = false;            for (int i=0; i<26; i++) {                next[i] = NULL;            }        };    };    TrieNode * root;    void init(vector<string> & dict) {        root = new TrieNode();        TrieNode * temp=NULL;        for (int i=0; i<dict.size(); i++) {            temp = root;            for (int j=0; j<dict[i].size(); j++) {                int index = dict[i][j] - 'a';                if (temp->next[index] == NULL) {                    temp->next[index] = new TrieNode();                }                temp = temp->next[index];            }            temp->_is_end = true;        }    }    vector<string> split_str(string sentence) {        vector<string> ret;        while(true) {            int index = sentence.find(' ');            if (index == string::npos) {                ret.push_back(sentence);                break;            }            ret.push_back(sentence.substr(0,index));            sentence = sentence.substr(index+1);        }        return ret;    }    string process(string word) {        int size = word.size();        TrieNode * temp = root;        for (int i=0; i<size; i++) {            int index = word[i] - 'a';            if (temp->next[index] == NULL) {                return word;            } else if (temp->next[index]->_is_end==true) {                return word.substr(0,i+1);            }            temp = temp->next[index];        }        return word;    }    void replace(vector<string>& words) {        for(int i=0; i<words.size(); i++) {            words[i] = process(words[i]);        }    }    string get_result_str(vector<string> & words) {        string ret;        for (int i=0; i<words.size(); i++) {            if(i == words.size() - 1) {                ret += words[i];            } else {                ret += words[i] + " ";            }        }        return ret;    }    string replaceWords(vector<string>& dict, string sentence) {        init(dict);        vector<string> words = split_str(sentence);        replace(words);        string ret = get_result_str(words);        return ret;    }};
原创粉丝点击