【LeetCode 14】最长公共前缀

题目链接

【题解】

二分最长前缀的长度。 然后暴力把第2..n个字符串和第1个字符串的前mid个字符匹配。

还有一种比较厉害的算法。
把这n个字符串加入到字典树当中去。
然后根节点到第一个有分支的节点路径上的点形成的字符串就是最长前缀了。

【代码】

class Solution {
public:
    string longestCommonPrefix(vector<string>& strs) {
        int l = 1,r = 0,ans = -1;
        for (int i = 0;i < (int)strs.size();i++){
            r = max(r,(int)strs[i].size());
        }
        while (l<=r){
            int mid = (l+r)/2;
            int ok = 1;
            for (int i = 1;i < (int)strs.size();i++){
                for (int j = 0;j < mid;j++)
                    if (strs[i][j]!=strs[0][j]){
                        ok = 0;
                        break;
                    }
                if (!ok) break;
            }
            if (ok){
                l = mid+1;
                ans = mid;
            }else r = mid-1;
        }
        string temp = "";
        for (int i = 0;i < ans;i++) temp += strs[0][i];
        return temp;
    }
};
posted @ 2019-11-06 16:33  AWCXV  阅读(106)  评论(0编辑  收藏  举报