算法题---最长公共前缀(乐乐独记)

1、题意描述

编写一个函数来查找字符串数组中的最长公共前缀。
如果不存在公共前缀,返回空字符串 “”。


示例 1:

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


示例 2:

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

2、解题思路

下面我们使用的方法是,先求第一个和第二个求公共前缀,然后拿上公共前缀去和第三个求公共前缀,依次类推,即可。

3、代码示例

public class LongestCommonPrefix {

    public static void main(String[] args) {
        LongestCommonPrefix longestCommonPrefix = new LongestCommonPrefix();
        String[] strs = {"","fllow","fllight"};
        System.out.println(longestCommonPrefix.longestCommonPrefix(strs));
    }

    public String longestCommonPrefix(String[] strs) {
        if(null == strs || strs.length == 0){
            return "";
        }
        // 1、先是第一个和第二个求公共前缀
        // 2、取出第一步的结果与第三个求公共前缀
        // 3、取出第二步的结果与第四个求公共前缀、
        // 4、依次类推
        String str1 = strs[0];
        int subLength = 0;
        String str2 = "";
        for(int i = 1; i < strs.length; i++){
            str2 = strs[i];
            subLength = lcp(str1, str2);
            if(subLength == 0){
                return "";
            }
            str1 = str1.substring(0, subLength);
        }
        return str1;
    }

    private int lcp(String str1, String str2){
        int subLength = 0;
        // 当其中有一个字符串为空或者空字符串时,返回0
        if(null == str1 || "".equals(str1) ||
                null == str2 || "".equals(str2)){
            return 0;
        }
        // 将小的字符串的数组长度给它
        int minLength = Math.min(str1.length(), str2.length());
        // 求两个字符串之间的最长公共左前缀
        for(int index = 0; index < minLength; index++){
            if(str1.charAt(index) == str2.charAt(index)){
                subLength ++;
                continue;
            }
            break;
        }
        return subLength;
    }
}

你可能感兴趣的:(算法题,算法,java,leetcode)