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 };

 

posted @ 2020-03-15 18:26  Jinxiaobo0509  阅读(129)  评论(0)    收藏  举报