14. 最长公共前缀(Java)

题目描述:

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

输入:

strs = [“flower”,“flow”,“flight”]

输出:

“fl”

代码实现:

public class Main{
    public static void main(String[] args) {
        //测试案例
        String[] strings = new String[]{"flower", "flow", "flight"};
        String res = longestCommonPrefix(strings);
        //打印结果
        System.out.println(res);//fl
    }

    public static String longestCommonPrefix(String[] strs) {
        //横向遍历:遍历字符串数组中每一个字符串,不断更新最长公共前缀
        String res = strs[0];//假定第一个字符串为最大前缀
        for (int i = 1; i < strs.length; i++) {
            //从第二个字符串开始比较
            res = longestCommonPrefix(res, strs[i]);//调用求最长公共前缀函数(重载)
        }
        //返回最终结果
        return res;
    }

    /**
     * 求任意两个字符的最长公共前缀
     *
     * @param res     当前最长公共前缀
     * @param compare 当前遍历到的数组中的某个字符串
     * @return 返回两个字符串的最长前缀
     */
    public static String longestCommonPrefix(String res, String compare) {
        int len = Math.min(res.length(), compare.length());//计算两者之间较短的字符串长度
        //目标索引
        int index = 0;
        for (int i = 0; i < len; i++) {
            //index < len:防止数组越界
            if (index < len && res.charAt(index) == compare.charAt(index)) {
                index++;//当连续字符相同时,index开始计数
            } else {
                break;//当出现字符不相同时,则选择直接跳出循环
            }
        }
        //返回切割后的字符串:就是当前两个字符串的最长前缀
        return res.substring(0, index);
    }
}

你可能感兴趣的:(力扣刷题,java,算法,开发语言)