Leetcode题解之字符串(9) 最长公共前缀

题目:https://leetcode-cn.com/explore/interview/card/top-interview-questions-easy/5/strings/40/

题目描述:

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

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

示例 1:

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

示例 2:

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

说明:

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

思路:我把题目理解为寻找最长公共子序列了。其实这题求前缀就简单多了。但是解题的方法很多。好的方法比较难想到。

很多方法详情在这:https://leetcode.com/problems/longest-common-prefix

//解法1:基于LCP算法。横向扫描法
class Solution {
 
     public String longestCommonPrefix(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;
    }

}


解法2:竖向扫描
public String longestCommonPrefix(String[] strs) {
    if (strs == null || strs.length == 0) return "";
    for (int i = 0; i < strs[0].length() ; i++){
        char c = strs[0].charAt(i);
        for (int j = 1; j < strs.length; j ++) {
            if (i == strs[j].length() || strs[j].charAt(i) != c)
                return strs[0].substring(0, i);             
        }
    }
    return strs[0];
}


//解法3:暴力破解
public String longestCommonPrefix(String[] strs) {

        if (strs == null || strs.length == 0) {
            return "";
        }

        if (strs.length == 1) {
            return strs[0];
        }

        int minlength = Integer.MAX_VALUE;
        for (int i = 0; i < strs.length; i++) {
            minlength = Math.min(strs[i].length(), minlength);
        }

        String prefix = "";
        Outer: for (int i = 0; i <= strs[0].length(); i++) {
            String tmp = strs[0].substring(0, i);
            for (int j = 1; j < strs.length; j++) {
                if (!strs[j].startsWith(tmp)) {
                    break Outer;
                }
            }
            prefix = tmp;
        }

        return prefix;
    }

猜你喜欢

转载自blog.csdn.net/qq_34433210/article/details/84104001