📜  使用排序查找最长公共前缀的Java程序(1)

📅  最后修改于: 2023-12-03 15:06:56.554000             🧑  作者: Mango

使用排序查找最长公共前缀的Java程序

简介

在字符串数组中查找最长公共前缀是编程面试中常见的问题。本文将介绍一种使用排序算法查找最长公共前缀的 Java 程序。

程序分析

该程序解决问题的思路如下:

  1. 首先将字符串数组按字典序排序。
  2. 然后比较排序后的第一个字符串和最后一个字符串的公共前缀即可。

排序的时间复杂度为 O(nlogn),字符串比较的时间复杂度为 O(min(m,n)),其中 m 为公共前缀的长度,n 为字符串数组的长度。所以该算法的时间复杂度为 O(nlogn)。

代码实现

下面是该算法的 Java 代码实现:

public class LongestCommonPrefix {

    public static String longestCommonPrefix(String[] strs) {
        if (strs == null || strs.length == 0) {
            return "";
        }

        Arrays.sort(strs);

        StringBuilder sb = new StringBuilder();
        int len = Math.min(strs[0].length(), strs[strs.length - 1].length());
        for (int i = 0; i < len; i++) {
            if (strs[0].charAt(i) != strs[strs.length - 1].charAt(i)) {
                break;
            }
            sb.append(strs[0].charAt(i));
        }
        return sb.toString();
    }
}

代码中的 longestCommonPrefix 方法接收一个字符串数组,返回数组中所有字符串的公共前缀。如果数组为空或长度为 0,则返回空字符串。程序先使用 Arrays.sort 方法将字符串数组按字典序从小到大排序,然后依次比较排序后的第一个字符串和最后一个字符串的字符。如果字符相同,则将其加入到一个 StringBuilder 中,否则返回 StringBuilder 中的字符串即为结果。