1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45
| #include <string> #include <vector> #include <unordered_map>
using std::string; using std::vector; using std::unordered_map;
struct Node { unordered_map<char, Node *> children; bool isEnd = false; };
class Solution { public: string longestCommonPrefix(vector<string> &strs) { if (strs.empty()) return ""; Node *root = new Node();
for (const string &s : strs) { Node *p = root; for (char c : s) { if (!p->children.count(c)) { p->children[c] = new Node(); } p = p->children[c]; } p->isEnd = true; }
string prefix; Node *p = root; while (p && p->children.size() == 1 && !p->isEnd) { char next = p->children.begin()->first; prefix.push_back(next); p = p->children[next]; }
return prefix; } };
|