最长公共前缀

204 阅读1分钟

要求:

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

示例:

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

输入:["dog","racecar","car"]
输出:""
不存在公共前缀

思路:

把数组排序,Arrays.sort(strs)排序时就是按照字符顺序排的,再将数组第一个元素和最后一个元素的字符从前往后对比即可。

代码:

public class Main {
    public static String replaceSpace(String[] strs) {
        //如果检查值不合法就返回空串
        if (!checkStrs(strs)) {
            return " ";
        }
        int len = strs.length;
        StringBuilder res = new StringBuilder();
        //给字符串数组的元素按照升序排序(若包含数字,数字会排在前面)
        Arrays.sort(strs);
        int m = strs[0].length;
        int n = strs[len-1].length;
        int num = Math.min(m, n);
        for (int i = 0; i < num; i++) {
            if (strs[0].charAt(i) == strs[len-1].charAt(i)) {
                res.append(strs[0].charAt(i));
            } else 
              break;
        }
        return res.toString();
    }
    
    private static boolean checkStrs(String[] strs) {
        boolean flag = false;
        if (strs != null) {
            //遍历strs检查元素值
            for (int i = 0; i < strs.length; i++) {
                if (strs[i] != null && strs[i].length() != 0) {
                    flag = true;
                } else {
                    flag = false;
                    break;
                }
            }
        }
        return flag;
    }
    public static void main(String[] args) {
        String[] strs = {"customer", "car", "cat"};
        System.out.println(Main.replaceSpace(strs));
    }
}