14. 最长公共前缀
1 class Solution 2 { 3 public: 4 string longestCommonPrefix(vector<string>& strs) 5 { 6 string res; 7 if(strs.empty()) return res; 8 int min_length = INT_MAX; 9 //重点:求出最短长度的字符串 10 for(auto a : strs) min_length = min(min_length,(int)a.size()); 11 int index = 0; 12 while(index < min_length) 13 { 14 for(int i = 0;i < strs.size() - 1;i ++) 15 { 16 if(strs[i][index] != strs[i + 1][index]) 17 { 18 return strs[0].substr(0,index); 19 } 20 } 21 index ++; 22 } 23 return strs[0].substr(0,index); 24 } 25 };
1 class Trie 2 { 3 public: 4 Trie *children[26]; 5 int size; 6 bool is_end; 7 Trie() 8 { 9 is_end = false; 10 size = 0; 11 for(int i = 0;i < 26;i ++) children[i] = NULL; 12 } 13 }; 14 15 class Solution 16 { 17 public: 18 string longestCommonPrefix(vector<string>& strs) 19 { 20 string ans = ""; 21 Trie *root = new Trie(); 22 for(int i = 0;i < strs.size();i ++) 23 { 24 Trie *p = root; 25 if(strs[i].empty()) return ans; 26 for(int j = 0;j < strs[i].size();j ++) 27 { 28 if(p->children[strs[i][j] - 'a'] == NULL) 29 { 30 p->children[strs[i][j] - 'a'] = new Trie(); 31 p->size ++; 32 } 33 p = p->children[strs[i][j] - 'a']; 34 } 35 p->is_end = true; 36 } 37 38 Trie *q = root; 39 while(q->size == 1 && q->is_end == false) 40 { 41 int k = 0; 42 for(;k < 26;k ++) 43 { 44 if(q->children[k]) 45 { 46 char temp = k + 'a'; 47 ans += temp; 48 break; 49 } 50 } 51 q = q->children[k]; 52 } 53 return ans; 54 } 55 };
Mamba never out

浙公网安备 33010602011771号