编写一个函数来查找字符串数组中的最长公共前缀。

如果不存在公共前缀,返回空字符串 ""。

示例 1:

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

示例 2:

输入:strs = ["dog","racecar","car"]
输出:""
解释:输入不存在公共前缀。

提示:

0 <= strs.length <= 200
0 <= strs[i].length <= 200
strs[i] 仅由小写英文字母组成

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/longest-common-prefix
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

解法一 横向扫描法:

    //横向扫描法
    /*
    * 思路:
    * 首先取第一个作为基准,然后逐个字符对比后面的,更新index的值,不相同直接退出
    * 最后根据index截取字符串即可
    * */
    public static String longestCommonPrefix(String[] strs) {
        if(strs == null ||strs.length == 0){
            return "";
        }
        int arrayLen =  strs.length;
        String str = strs[0];
        for (int i = 1; i <arrayLen; i++) {
            int minLen = Math.min(strs[i].length(),str.length());
            int index = 0;
            for (int j = 0; j < minLen; j++) {
                if(str.charAt(j) == strs[i].charAt(j)){
                    index++;
                }else
                    break;
            }
            str = str.substring(0,index);
            if(str.length() == 0) break;
        }
        return str;
    }

解法二 纵向扫描法

    //纵向扫描法
    /*
    * 思路:
    * 首先取第一个字符串的第一个字母,然后比较后面的字符串的第n个,直到找到不相同的那个
    * 重新构建String即可
    * */
    public static String longestCommonPrefix(String[] strs) {
      if(strs == null || strs.length <=0)
          return "";
      StringBuilder prefix = new StringBuilder();
      int len = strs[0].length();
      out:
        for (int i = 0; i < len; i++) {
            char nowChar = strs[0].charAt(i);
            for (String s:strs) {

                if(i>=s.length()||nowChar != s.charAt(i)){
                    break out;
                }
            }
            prefix.append(nowChar);
        }
        return prefix.toString();
    }
最后修改:2021 年 03 月 06 日
如果觉得我的文章对你有用,请随意赞赏