初级算法_字符串 --- 最长公共前缀

1、最长公共前缀

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

示例 1:
输入:strs = [“flower”,“flow”,“flight”]
输出:“fl”

示例 2:
输入:strs = [“dog”,“racecar”,“car”]
输出:“”
解释:输入不存在公共前缀。

2、代码

import collections
from re import findall
from typing import re, List


class Solution:
    def longestCommonPrefix(self, strs: List[str]) -> str:

        # 内置函数 zip()
        res = ''
        for i in zip(*strs):
            if len(set(i)) == 1:
                res += i[0]
            else:
                break
        return res
        
		# 双层for循环
        a = []
        for i in range(len(strs[0])):
            h = True
            # 判断第二个元素往后的每个元素开头是不是i,是i,则继续并把元素添加到新列表中,不是i就返回
            for j in range(1, len(strs)):
                try:
                    if strs[j][i] == strs[0][i]:
                        continue
                    else:
                        h = False
                        break
                except:
                    h = False
                    break
            if h == False:
                break
            a.append(strs[0][i])
        m = ''.join(a)
        return m





class TestSolution:

    def test_three(self):
        b = Solution()
        b.longestCommonPrefix(["ab", "a"])

    # def test_one(self):
    #     b = Solution()
    #     b.countAndSay(n=3322251)
    #
    # def test_two(self):
    #     b = Solution()
    #     b.countAndSay(n=4)

3、分析

从前到后,希望返回数组中所有字符串的 最长的公共前缀。
(1)循环第一个字符串,依次将元素与后面对应位置上的元素做比较,如果相等,则新增到外面的字符串中,如果不相等则停止循环,最终把外面的那个字符串返回即可。
难点在于:如何将数组中的其他字符串对应位置跟第一个字符串做比较。思路是从数组的第二个元素开始,依次遍历每个元素。
实施思路:遍历第一个字符串的每一个元素,当取第一个位置也就是i等于0的时候,接下来遍历数组中后面所有字符串的第一个元素,如果相等则continue,不等则break,并且跳出第一个循环(这里使用的是标记 if h == False 跳出循环)
(2)第二种思路:因为要比对数组中的对应位置的元素。内置函数 zip 就是用来处理对应位置的元素。
(3)zip同时遍历多个序列,同时遍历多个序列,同时遍历多个序列

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阿_焦

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值