其他分享
首页 > 其他分享> > LeetCode14. 最长公共前缀 详解

LeetCode14. 最长公共前缀 详解

作者:互联网

LeetCode14. 最长公共前缀

题目描述

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

思路分析

  1. 此题目要求返回字符串数组中所有字符串的公共前缀子串
  2. 可以考虑使用化繁为简的思路,先编写一个方法可以得到两个字符串的最长公共前缀
  3. 然后遍历这个字符串数组,依次取出一个字符串,与前一次比较返回的最长公共子串再作比较
  4. 比较的过程中若发现最长公共子串已经为空,则直接返回空
  5. 否则返回遍历完比较结束的子串
  6. 详细思路见源码

源码及分析

//思路分析:
    //1. 要查找字符串数组中最长公共前缀,采用化繁为简的思路
    //2. 遍历这个字符串数据,每次比较两个字符串的公共前缀并记录
    //3. 则在一次遍历结束后,每个字符串都被比较过
    public String longestCommonPrefix(String[] strs) {
        //数据校验
        if (strs == null || strs.length == 0) {
            return "";
        }
        //拿出字符串数组中的第一个字符串作为参考
        String str = strs[0];
        //遍历剩下的字符串并依次比较
        for (int i = 1; i < strs.length; i++) {
            //将两个字符串比较的结果继续存储到str字符串中
            str = twoLongestCommonPrefix(str, strs[i]);
            //如果在比较的过程中发现str已经是空的,则直接返回空串
            if (str == ""){
                return "";
            }
        }
        //返回最长公共子串
        return str;
    }

    //编写方法查找两个字符串的最长公共子串
    public String twoLongestCommonPrefix(String str1, String str2) {
        //数据校验
        if (str1 == null || str2 == null) {
            return "";
        }
        //定义变量保存两个字符串的最小长度
        int len = Math.min(str1.length(), str2.length());
        //定义一个index索引用来保存两个字符串的最长公共子串的长度
        int index = 0;
        for (int i = 0; i < len; i++) {
            if (str1.charAt(i) == str2.charAt(i)) {
                index++;
            } else {
                break;
            }
        }
        //返回最长公共子串
        return str1.substring(0, index);
    }

标签:子串,前缀,详解,LeetCode14,str,公共,字符串,最长
来源: https://www.cnblogs.com/mx-info/p/14747156.html