LeetCode14. Longest Common Prefix(字典树:最长公共前缀)

    xiaoxiao2021-12-14  36

    题目链接:https://leetcode.com/problems/longest-common-prefix/

    Write a function to find the longest common prefix string amongst an array of strings.(最长公共前缀)

    解题思路:字典树。以任一串去查找,找到最长的且匹配数为n的即可,水题。

    struct Trie{ Trie *next[26]; int cnt; //string str; }*root; int n; string ans; void insert(string s){ Trie *p = root,*pnew; for(int i = 0;i < s.size();++ i){ int x = s[i] - 'a'; if(p->next[x] == NULL){ pnew = new Trie; pnew->cnt = 1; for(int j = 0;j < 26;++ j){ pnew->next[j] = NULL; } p->next[x] = pnew; } else p->next[x]->cnt++; p=p->next[x]; } } int search(string s){ Trie *p = root; bool f = 0; for(int i = 0;i < s.size();++ i){ int x = s[i] - 'a'; if(p->next[x] == NULL) return 0; if(p->next[x]->cnt == n){ ans = s.substr(0,i+1); f = 1; } p = p->next[x]; } return f; } void init(){ root = new Trie; root->cnt = 0; for(int i = 0;i < 26;++ i){ root->next[i] = NULL; } } class Solution { public: string longestCommonPrefix(vector<string>& strs) { n = strs.size(); if(!n) return ans = ""; init(); for(int i = 0;i < n;++ i){ insert(strs[i]); } if(!search(strs[0])) return ans = ""; return ans; } };

    转载请注明原文地址: https://ju.6miu.com/read-962905.html

    最新回复(0)