14. Longest Common Prefix

第一种算法,不需要任何排序的暴力算法,一个字符一个字符,一个字符串一个字符串去比较,时间复杂度O(m*n), m是数组长度,n是最短字符串的长度。

    public String longestCommonPrefix(String[] strs) {
        StringBuilder res = new StringBuilder();
        for (int j = 0; j < strs[0].length(); j++) {
            char c = strs[0].charAt(j);
            for (int i = 1; i < strs.length; i++) {
                if (j == strs[i].length())
                    return res.toString();
                else if (strs[i].charAt(j) != c)
                    return res.toString();
            }
            res.append(c);
        }
        return res.toString();
    }

第二种算法,把字符串数组排个序,只比较第一和最后一个字符串即可,因为如果第一和最后一个字符串的某个index的字符相同的话,那么中间的一定也相同。时间复杂度O(2*n) = O(n),n是最短字符串的长度.

    public String longestCommonPrefix(String[] strs) {
        int n = strs.length;
        StringBuilder res = new StringBuilder();
        Arrays.sort(strs);
        for(int i=0;i<strs[0].length();i++){
            if(strs[0].charAt(i)==strs[n-1].charAt(i)){
                res.append(strs[0].charAt(i));
            }else
                return res.toString();
        }
        return res.toString();
    }

 

上一篇:高性能 FastAPI 框架入门精讲-3多应用拆分注册蓝图


下一篇:virtualenv:用来为一个应用创建一套“隔离”的Python运行环境