Python、java、go实现“最长公共前缀”的几种方法

找出字符串数组中最长的公共字符前缀

如果,没有公共字符前缀的话就返回空字符串""

Example 1:

Input: ["flower","flow","flight"]
Output: "fl"

Example 2:

Input: ["dog","racecar","car"]
Output: ""
Explanation: There is no common prefix among the input strings.

注意:所有输入字符串均为小写"a-z"

1:先将字符串列表按长度从小到大排列,然后以最小的字符串为标准进行单个字符比较。时间复杂度:n(o^2)

def longestCommonPrefix(self, strs):
        """
        :type strs: List[str]
        :rtype: str
        """
        if len(strs)==0:
            return ""
        strs.sort(key=len)
        for i in range(len(strs[0])):
            for j in range(1,len(strs)):
                if strs[0][i] != strs[j][i]:
                    return strs[0][0:i]
        return strs[0]

2:取出字符串集合中最小和最大的字符串,遍历小字符串和大字符串做比较,输出相应结果。

def longestCommonPrefix(self, strs):
        """
        :type strs: List[str]
        :rtype: str
        """
        if not strs:
            return ""
        min_str = min(strs)
        max_str = max(strs)
        for i, j in enumerate(min_str):
            if j != max_str[i]:
                return min_str[:i]
        return min_str

上面是 python 实现,下面是 java 实现的版本

public String longestCommonPrefix(String[] strs) {
        if (strs == null || strs.length == 0) {
            return "";
        }
        String min = strs[0];
        String max = strs[0];
        for (int i = 1; i < strs.length; i++) {
            //若Str1等于参数字符串Str2字符串,则返回0;若该Str1按字典顺序小于参数字符串Str2,
            // 则返回值小于0;若Str1按字典顺序大于参数字符串Str2,则返回值大于0。
            if (min.compareTo(strs[i]) > 0) {
                min = strs[i];
            }
            if (max.compareTo(strs[i]) < 0) {
                max = strs[i];
            }
        }
        for (int i = 0; i < min.length(); i++) {
            if (min.charAt(i) != max.charAt(i)) {
                return min.substring(0, i);
            }
        }
        return min;
    }

以下是 go 实现版本

func longestCommonPrefix(strs []string) string {
	if len(strs) == 0 {
		return ""
	}
	min := strs[0]
	max := strs[0]
	for i := 1; i < len(strs) ;i++ {
		if min > strs[i] {
			min = strs[i]
		}
		if max < strs[i] {
			max = strs[i]
		}
	}
	for j := 0; j < len(min); j++ {
		if min[j] != max[j] {
			return min[0:j]
		}
	}
	return min
}

算法题来自:https://leetcode-cn.com/problems/longest-common-prefix/description/

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值