写到自闭。
class Solution {
public:
/**
*
* @param operators string字符串vector<vector<>> the ops
* @return string字符串vector
*/
vector<string> trieU(vector<vector<string> >& operators) {
if (operators.empty()) {
return std::vector<std::string>();
}
std::vector<std::string> res;
tree.push_back(new trie());
for (int i = 0; i < operators.size(); ++i) {
std::string op = operators[i][0];
std::string wd = operators[i][1];
if (op == "1") {
trie *root = tree[0];
for (int j = 0; j < wd.size(); ++j) {
if (root->word[wd[j] - 'a'] == nullptr) {
root->word[wd[j] - 'a'] = new trie();
tree.push_back(root->word[wd[j] - 'a']);
}
root = root->word[wd[j] - 'a'];
++root->times;
}
root->end = true;
} else if (op == "2") {
trie *root = tree[0];
for (int j = 0; j < wd.size(); ++j) {
root = root->word[wd[j] - 'a'];
--(root->times);
}
if (root->times == 0) {
root->end = false;
}
} else if (op == "3") {
trie *root = tree[0];
bool flag = true;
for (int j = 0; j < wd.size(); ++j) {
if (root->word[wd[j] - 'a']) {
root = root->word[wd[j] - 'a'];
} else {
flag = false;
break;
}
}
if (root->end && flag) {
res.push_back("YES");
} else {
res.push_back("NO");
}
} else {
trie *root = tree[0];
int num = 0;
int flag = true;
for (int j = 0; j < wd.size(); ++j) {
if (root->word[wd[j] - 'a']) {
root = root->word[wd[j] - 'a'];
} else {
flag = false;
break;
}
}
if (flag) {
num = root->times;
}
res.push_back(std::to_string(num));
}
}
for (auto &it : tree) {
delete(it);
}
return res;
}
private:
struct trie {
bool end;
int times;
std::vector<trie *> word;
trie() : end(false), word(std::vector<trie *>(26, nullptr)), times(0) {}
};
std::vector<trie *> tree;
};

京公网安备 11010502036488号