Leetcode 14. 最长公共前缀

14. 最长公共前缀

Leetcode 14. 最长公共前缀

一、题目描述

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

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

示例 1:

输入:strs = "flower","flow","flight"

输出:"fl"

示例 2:

输入:strs = "dog","racecar","car"

输出:""

解释:输入不存在公共前缀。

提示:

  • 1 <= strs.length <= 200
  • 0 <= strsi.length <= 200
  • strsi 仅由小写英文字母组成

二、我的想法

1.以数组中第一个字符串为firstStr为标准。

2.遍历数组,并且也遍历第一个字符串的字符。如果其他字符串以firstStr0:j为开头,就将firstStr0:j赋值给tmpStr,并标记flag为true。如果不是以firstStr0:j开头,就将tmpStr减少一位,并标记flag为false,跳出循环。

3.当flag为false时,跳出最外层循环。最后返回的字符串为tmpStr。

python 复制代码
class Solution:
    def longestCommonPrefix(self, strs: List[str]) -> str:
        firstStr = strs[0]
        firstStrlen = len(firstStr)
        tmpStr = ""
        flag = False

        for j in range(0, firstStrlen + 1):
            for i in range(0, len(strs)):
                if strs[i].startswith(firstStr[0:j]):
                    tmpStr = firstStr[0:j]
                    flag = True
                else:
                    flag = False
                    tmpStr = tmpStr[:-1]
                    break
            if flag == False:
                break
        return tmpStr

灵茶山艾府的题解简单多了: 简单题,简单做(Python/Java/C++/C/Go/JS/Rust)

看示例 1:

flower

flow

flight

从左到右,竖着看,第一列全是 f,第二列全是 l,第三列就不全一样了,所以「最长公共前缀」是 fl。

具体算法如下:

1.从左到右遍历 strs 的每一列。

2.设当前遍历到第 j 列,从上到下遍历这一列的字母。

3.设当前遍历到第 i 行,即 strsij。如果 j 等于 strsi 的长度,或者 strsij不等于strsi0,说明这一列的字母缺失或者不全一样,那么最长公共前缀的长度等于 j,返回 strs0 的长为 j 的前缀。

4.如果没有中途返回,说明所有字符串都有一个等于 strs0 的前缀,那么最长公共前缀就是 strs0

python 复制代码
class Solution:
    def longestCommonPrefix(self, strs: List[str]) -> str:
        s0 = strs[0]
        for j, c in enumerate(s0):
            for s in strs:
                if j == len(s) or s[j] != c:
                    return s0[:j]
        return s0
相关推荐
MrZhao4005 分钟前
Agent 长上下文处理机制:Context Compact 与 Memory 的协同
算法
h_a_o777oah14 分钟前
【动态规划】区间 DP :三层循环逻辑与模板实现细节(洛谷 P1880)
c++·算法·动态规划·acm·区间dp·化环为链·石子合并
从此以后自律19 分钟前
迪杰斯特拉
算法
QiLinkOS27 分钟前
第三视觉理解徐玉生与他的商业活动(32)
大数据·c++·人工智能·算法·开源协议
KaMeidebaby38 分钟前
卡梅德生物技术快报|实操手册:CXCL4 蛋白原核表达全套工艺,两步层析去除蛋白多聚体附完整电泳数据
人工智能·算法·机器学习·架构·spark
AIGCmagic社区44 分钟前
Unlimited OCR 论文精读:R-SWA 如何实现一次性长文档解析
人工智能·算法·aigc
鹏易灵1 小时前
C++——7.类与对象,掌握封装、继承、多态.详解
开发语言·c++·算法
Mortalbreeze1 小时前
深入 Linux 线程机制(三):线程互斥——竞争条件与互斥锁的本质
linux·运维·服务器·c++·算法
Mr_Controll1 小时前
【运动控制——电子凸轮曲线设计(多项式)】
算法·自动化
Sam09271 小时前
【AI 算法精讲 15】余弦相似度:向量检索与归一化内积
人工智能·python·算法·ai