14. Longest Common Prefix

来源:互联网 发布:北京淘宝电商培训 编辑:程序博客网 时间:2024/06/11 06:01

题目

求字符串数组的最长公共子串

解决思路

这题算比较简单的了,思路有很多,下面我就提供一种思路。

既然要求字符串数组的最长公共子串,那么这个公共子串的长度肯定不大于最短的字符串数组,并且,这个公共子串,不仅字符是一样的,而且索引位置也必须一样(LeetCode上是这么理解的,我在做这题的时候也没有意识到这点)所以,我们可以先找到最短的字符串,然后以这个最短的字符串为标准,那么就很容易求出最大的公共子串。

下面则是该思路的Java程序:

public String longestCommonPrefix(String[] strs) {        if(strs.length == 0)            return "";        // 1.求数组中最短的字符串        int minlen = strs[0].length();        int minIndex = 0;        for(int i = 0;i < strs.length;i++){            if(minlen > strs[i].length()) {                minlen = strs[i].length();                minIndex = i;            }        }        if(minlen == 0)            return "";        // 2.求公共的字符串        StringBuffer sb = new StringBuffer();        int index = 0;        while(index < minlen) {            sb.append(strs[minIndex].charAt(index));            for (int k = 0; k < strs.length; k++) {                if (!strs[k].startsWith(sb.toString())) {                    if(index == 0)                        return "";                    else{                        sb.deleteCharAt(sb.length()-1);//由于最后一个不包含在公共子串中,所以需要删除                        return sb.toString();                    }                }            }            index++;        }        return sb.toString();    }

由程序可以看出,该算法的时间复杂度最大为O(n2),空间复杂度为O(1)

原创粉丝点击