第一种算法,不需要任何排序的暴力算法,一个字符一个字符,一个字符串一个字符串去比较,时间复杂度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();
    }

 

posted on 2022-01-25 06:58  阳光明媚的菲越  阅读(30)  评论(0编辑  收藏  举报