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

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

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

示例 2:

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

基于Golang的代码实现如下:

func longestCommonPrefix(strs []string) string {
    // 定义返回值
    var s string
    // 首先找到最短的字符串作为基准
    tag := shortest(strs)
    // 为空直接返回
    if tag == "" {
        return ""
    }
    // 对基准由长到短依次判断
    for i := 0; i < len(tag); i++ {
        // 定义基准的指定长度为返回值
        s = tag[0 : len(tag)-i]
        // 遍历数组中每个字符串,判断其指定长度下是否和基准一致
        for _, str := range strs {
            // 找到不一致的则清空返回值,退出循环,进行下一个长度的判断
            if s != str[0:len(s)] {
                s = ""
                break
            }
        }
        // 如果上面循环全部通过,说明某一长度下所有字符串都满足,则直接返回
        if s != "" {
            return s
        }
    }
    return s
}

// 找到最短的字符串
func shortest(strs []string) string {
    s := ""
    for _, str := range strs {
        if str == "" {
            return ""
        }
        if s == "" || len(str) < len(s) {
            s = str
        }
    }
    return s
}

邹友
5 声望1 粉丝