高级农民
- 积分
- 3581
- 大米
- 颗
- 鳄梨
- 个
- 水井
- 尺
- 蓝莓
- 颗
- 萝卜
- 根
- 小米
- 粒
- 学分
- 个
- 注册时间
- 2016-9-8
- 最后登录
- 1970-1-1
|
多谢!之前确实debug出来一个逻辑性的问题,是sentence中某个单词比dictionary里要短的情况没有考虑进去,再加上您提议的初始化,已经过了!code如下:
```
class TrieNode {
public:
string word;
TrieNode* children[26];
TrieNode() {
for (int i = 0; i < 26; i++){
children[i] = NULL;
}
}
};
class Solution {
public:
string replaceWords(vector<string>& dict, string sentence) {
string res;
TrieNode* root = new TrieNode();
for (int i = 0; i < dict.size(); i++){
string cur = dict[i];
TrieNode* curNode = root;
for (int j = 0; j < cur.size(); j++){
if (curNode->children[cur[j]-'a'] == NULL){
curNode->children[cur[j]-'a'] = new TrieNode();
}
curNode = curNode->children[cur[j]-'a'];
}
curNode->word = cur;
}
int i = 0;
int pre = 0;
while (i <= sentence.size()){
if ((i == sentence.size()) || (sentence[i] == ' ')){
string cur = sentence.substr(pre,i-pre);
TrieNode* curNode = root;
for (int j = 0; j < cur.size(); j++){
if (curNode->children[cur[j]-'a']!=NULL){
curNode = curNode->children[cur[j]-'a'];
if (curNode->word.empty() == false){
cur = curNode->word;
break;
}
}
else{
break;
}
}
res = res + cur + " ";
if (i >= sentence.size()){
break;
}
i++;
pre = i;
}
else{
i++;
}
}
res.erase(res.begin()+res.size()-1);
return res;
}
};
``` |
|