最长公共前缀

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

思路:

  1. 先利用Arrays.sort(strs)为数组排序;
  2. 再将数组第一个元素和最后一个元素的字符从前往后对比。
package algorithm;

import java.util.Arrays;

/**
 * 最长公共前缀
 * Leetcode: 编写一个函数来查找字符串数组中的最长公共前缀。如果不存在公共前缀,返回空字符串 ""。
 * <p>
 * 示例 1:
 * <p>
 * 输入: ["flower","flow","flight"]
 * 输出: "fl"
 * Copy to clipboardErrorCopied
 * 示例 2:
 * <p>
 * 输入: ["dog","racecar","car"]
 * 输出: ""
 * 解释: 输入不存在公共前缀。
 */
public class MaxCommonPrefix {
    public static void main(String[] args) {
        String[] strs = {"dog", "door", "didi"};
        String maxCommonPrefix = getMaxCommonPrefix(strs);
        System.out.println(maxCommonPrefix);
    }

    /**
     * 获取最长公共前缀
     *
     * @param strs
     */
    private static String getMaxCommonPrefix(String[] strs) {
        if (checkStrs(strs)) {
            int len = strs.length;
            StringBuilder strbuilder = new StringBuilder();
            Arrays.sort(strs);
            int m = strs[0].length();
            int n = strs[len - 1].length();
            for (int i = 0; i < len; i++) {
                if (strs[0].charAt(i) == strs[len - 1].charAt(i)) {
                    strbuilder.append(strs[0].charAt(i));
                } else {
                    break;
                }
            }
            return strbuilder.toString();
        } else {
            return "";
        }
    }

    /**
     * 检查字符串数组是否合法
     *
     * @param strs 原始字符串
     * @return true 合法,false 不合法
     */
    private static boolean checkStrs(String[] strs) {
        boolean flag = false;
        if (strs != null) {
            for (int i = 0; i < strs.length; i++) {
                if (strs[i] != null && strs[i].length() != 0) {
                    flag = true;
                } else {
                    flag = false;
                }
            }
        }
        return flag;
    }
}

posted @ 2020-04-27 11:22  西北野狼  阅读(170)  评论(0编辑  收藏  举报