LeetCode——第14题:最长公共子串

题目:

编写一个函数来查找字符串数组中的最长公共前缀。

如果不存在公共前缀,返回空字符串 “”。

示例 1:

输入: [“flower”,”flow”,”flight”]
输出: “fl”

示例 2:

输入: [“dog”,”racecar”,”car”]
输出: “”
解释: 输入不存在公共前缀。

说明:

所有输入只包含小写字母 a-z 。
代码:

package leetCode;
/**
 *时间:11ms
 * 2018.7.22
 * 最长公共前缀
 * 思路:先找到最小字符串,然后从开头长度为1开始取字符串的子串,在循环strs【】,
 * 判断是否有不是以这个子串开始的,如果是退出,如果全都以这个子串开始,保存这个子串
 * 作为当前最长公共子串
 * 
 * 说明:一开始想的是找出最长字符串,后来看到有位大佬是找的最短字符串,发现虽然找最长字符串没啥影响,
 * 且运行时间啥的也不会多多少,但是用最短字符串合理一些
 * 
 * @author dhc
 *
 */
public class Fourteen {
    public static String longestCommonPrefix(String[] strs) {
        if(strs.length == 0) {
            return "";
        }
        String re = "";
        int index = 0;
        int length = strs[0].length();
        //找到最短字符串
        for(int i = 1;i < strs.length;i++) {
            if(strs[i].length() < length) {
                length = strs[i].length();
                index = i;
            }
        }
        out:for(int i = 1;i <= length;i++) {
            String sub = strs[index].substring(0, i);
            for(int j = 0;j < strs.length;j++) {
                if(j != index && !strs[j].startsWith(sub)) {
                    break out;
                }
            }
            re = sub;
        }
        return re;
    }
    public static void main(String[] args) {
        String[] strs = new String[] {"asdjcxkf","asdmhgf","asdiejfg"};
        String re = longestCommonPrefix(strs);
        System.out.println(re);
    }
}

你可能感兴趣的:(java,leetCode)