字典树
根据输入字符串,建立字典树,维护最长公共前缀.
class Solution {
public:
struct Trie{
Trie* nxt[26];
int cnt;
Trie(int cnt){
for(int i=0;i<26;++i) nxt[i]=NULL;
this->cnt=cnt;
}
};
int n;
Trie* root;
void insert(string s){
Trie *cur=root;
for(int i=0;s[i];++i){
int id=s[i]-'a';
if(!cur->nxt[id]) cur->nxt[id]=new Trie(1);
else cur->nxt[id]->cnt+=1;
cur=cur->nxt[id];
}
}
string search(string s){
string ans="";
Trie* cur=root;
for(int i=0;s[i];++i){
int id=s[i]-'a';
if(cur->nxt[id]->cnt==n) ans+=s[i];
cur=cur->nxt[id];
}
return ans;
}
string longestCommonPrefix(vector<string>& strs) {
n=strs.size();
if(!n) return "";
root=new Trie(0);
for(int i=0;i<n;++i) insert(strs[i]);
return search(strs[0]);
}
};
个人 LeetCode 代码仓库地址:MyLeetCode,记录刷题成长之路,欢迎各位小伙伴们多多 star ~