最长公共前缀

104 阅读1分钟

最长公共前缀

说明

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

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

示例 1:

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

示例 2:

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

提示:

  • 1 <= strs.length <= 200
  • 0 <= strs[i].length <= 200
  • strs[i] 仅由小写英文字母组成

来源:力扣(LeetCode)

链接:leetcode.cn/problems/lo…

题解

    public static void main(String[] args) {
        //编写一个函数来查找字符串数组中的最长公共前缀。
        //如果不存在公共前缀,返回空字符串 `""`。
        String[] strs = new String[]{"reflower","flow","flight"};
        System.out.println(demo(strs));
    }
​
    public static String demo(String[] strs){
        String str = strs[0];
        if(str.length() == 0){
            return "";
        }
        //取得最小的字符串
        for (String s : strs) {
            if (s.length() < str.length()) {
                str = s;
            }
        }
        if(str.length() == 0){
            return "";
        }
        int num = str.length();
        for (int i = 0; i < num; i++) {
            String substring = str.substring(0, num - i);
            boolean flag = true;
            for (String s : strs) {
                String s2 = s.substring(0, num - i);
                if(!substring.equals(s2)){
                    flag = false;
                    break;
                }
            }
            if(flag){
                return substring;
            }
        }
        return "";
    }

增强版

示例 2: 编写一个函数来查找字符串数组中的最长公共字符串

如果不存在最长公共字符串,返回空字符串 ""

输入:strs = ["doceg","racecar","cacer"]
输出:"ce"

题解

    public static void main(String[] args) {
        String[] strs = new String[]{"reflower","flow","flight"};
        System.out.println(demo(strs));
    }

    public static String demo(String[] strs){
        String str = strs[0];
        if(str.length() == 0){
            return "";
        }
        //取得最小的字符串,为后面减少执行次数
        for (String s : strs) {
            if (s.length() < str.length()) {
                str = s;
            }
        }
        if(str.length() == 0){
            return "";
        }
        int number = str.length();
        int i = str.length();
        while (number > 0){
            int j = 0;
            i = i - (i - number);
            while (i <= str.length()){
                String substring = str.substring(j, i);
                if(test(strs,substring)){
                    return substring;
                }
                j += 1;
                i += 1;
            }
            number -= 1;
        }
        return "";
    }

    public static boolean test(String[] strs,String str){
        for (String s : strs) {
            if(!s.contains(str)){
                return false;
            }
        }
        return true;
    }