最长公共前缀_LeetCode08


最长公共前缀_LeetCode08

题目

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

  • 示例 1:
输入: ["flower","flow","flight"]
输出: "fl"
  • 示例 2:
输入: ["dog","racecar","car"]
输出: ""
解释: 输入不存在公共前缀。

说明:

所有输入只包含小写字母 a-z 。

解题思路

  • 根据字符串数组中的每一个字符串依次比较前缀是否相同,从而得到最长公共前缀的长度。

代码

public String longestCommonPrefix(String[] strs) {
        //1.先找到最短字符串
        int minLength = 0;
        for(int i = 0;i < strs.length;i++){
            if(i == 0){
                minLength = strs[0].length();
            }
            if(minLength > 0 && minLength > strs[i].length()){
                minLength = strs[i].length();
            }
        }
        if(minLength == 0){
            return "";
        }
        int lastIndex = 0;
        boolean flag = true;
        //2.根据最短的字符串来进行依次循环判断
        for (int i = 0; i < minLength; i++) {
            Character currentChar = null;
            for(int j = 0;j < strs.length;j++){
                if(currentChar == null){
                    currentChar = strs[j].charAt(i);
                    continue;
                }
                if(!currentChar.equals(strs[j].charAt(i))){
                    flag = false;
                }
            }
            if(!flag){
                break;
            }else{
                lastIndex++;
            }
        }
        if(lastIndex == 0){
            return "";
        }
        return strs[0].substring(0,lastIndex);
    }

官方思路


public String longestCommonPrefix1(String[] strs) {
    if (strs.length == 0) return "";
    String prefix = strs[0];
    for (int i = 1; i < strs.length; i++){
        while (strs[i].indexOf(prefix) != 0) {
            prefix = prefix.substring(0, prefix.length() - 1);
            if (prefix.isEmpty()) return "";
        }
    }
    return prefix;
}

官方解题思路有很多种,这里展示第一种感觉十分巧妙。

  1. 获取到数组中的第一个字符串
  2. 第一个字符串和第二个字符串相互比较,通过indexOf得出用第一个字符串作为前缀是否满足。从而得到第一个字符串和第二个字符串的公共前缀字符串
  3. 在将第三个字符串拿来和公共字符串前缀作为对比,从而得到这次计算以后的公共字符串

tzNyfx.png


  TOC