当前位置: 首页 > article >正文

leetcode_字符串 14.最长公共前缀函数

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

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

1. startswith()方法

  • 调用Python内置的startwith()方法,用于检查字符串是否以指定的子字符串开头
  • 语法: str.startswith(prefix[, start[, end]])
    • prefix:
      指定要检查的开头子字符串,可以是一个字符串或包含多个字符串的元组。
    • start(可选):
      起始检查的位置(索引)
    • end(可选):
      结束检查的位置(索引,开区间)
def func(strs):
    if not strs:  # 如果字符串数组为空,返回空字符串
        return ""
    
    # 假设输入的第一个字符串是公共前缀
    prefix = strs[0]
    
    # 遍历数组中的每个字符串,与当前的公共前缀逐一比较
    for s in strs[1:]:
        while not s.startswith(prefix):  # 如果当前字符串不以 prefix 开头
            # startswith() 是 Python 的内置字符串方法。它是字符串类型 (str) 提供的一部分,用于检查字符串是否以指定的子字符串开头。
            prefix = prefix[:-1]  # 将 prefix 从后往前缩短一位
            if not prefix:  # 如果 prefix 缩短到空字符串
                return ""
    
    return prefix

strs = ["flower", "flow", "flight"]
print(func(strs)) 
  • 时间复杂度:最坏情况下,遍历所有字符串并比较每个字符,时间复杂度是 O(S),S 是所有字符串的总字符数
  • 空间复杂度:O(1),仅使用了常量空间来存储 prefix

2. 按列比较法

  • 通过逐列比较每个字符串的字符,直到出现不同的字符为止。该方法的核心思想是遍历所有字符串中的每个字符,并逐列比较它们。
def func(strs):
    if not strs:  # 如果字符串数组为空,返回空字符串
        return ""
    
    # 获取最短字符串的长度,以避免越界
    min_len = min(len(s) for s in strs)
    
    # 按列逐字符比较
    for i in range(min_len):
        # 获取第一个字符串的第i个字符
        char = strs[0][i]
        
        # 遍历剩下的字符串,检查每个字符串的第i个字符
        for s in strs[1:]:
            if s[i] != char:
                return strs[0][:i]  # 如果有不同,返回当前的前缀
    
    return strs[0][:min_len]  # 如果没有不同,返回最短字符串的全部内容

strs = ["flower", "flow", "flight"]
print(func(strs))
  • 时间复杂度:O(S), S 是所有字符串的总字符数。最坏情况下,遍历所有字符并进行逐列比较
  • 空间复杂度:O(1)

3. 排序法

  • 排序法通过先将字符串数组按字典序排序,然后比较排序后的第一个和最后一个字符串,获得公共前缀。这种方法的关键是利用排序将相似的字符串排在一起,减少比较次数。
def func(strs):
    if not strs:  # 如果字符串数组为空,返回空字符串
        return ""
    
    strs.sort()  # 将字符串数组按字典序排序
    
    # 比较第一个和最后一个字符串的公共前缀
    first, last = strs[0], strs[-1]
    
    for i in range(min(len(first), len(last))):
        if first[i] != last[i]:
            return first[:i]
    
    return first  # 如果没有不同,返回第一个字符串

strs = ["flower", "flow", "flight"]
print(func(strs))
  • 时间复杂度:O(nlogn + S), n 是字符串的数量,S 是字符串的平均长度。排序时间复杂度为 O(nlogn),比较字符串的时间复杂度为 O(S)
  • 空间复杂度:O(1)(不考虑排序中使用的额外空间)

http://www.kler.cn/a/513762.html

相关文章:

  • < OS 有关 > 阿里云:轻量应用服务器 的使用 安装 Tailscale 后DNS 出错, 修复并替换 apt 数据源
  • 数据分析及应用:经营分析中的综合指标解析与应用
  • 图的基本概念
  • HTML `<head>` 元素详解
  • 2024又是一年的CSDN之旅-总结过去展望未来
  • 讯飞星火大模型将超越chatgpt?
  • GitHub的主要用途及核心功能
  • 99.12 金融难点通俗解释:毛利率
  • Cyber Security 101-Security Solutions-Vulnerability Scanner Overview(漏洞扫描程序概述)
  • Excel 技巧17 - 如何计算倒计时,并添加该倒计时的数据条(★)
  • RavenMarket:用AI和区块链重塑预测市场
  • Cursor的详细使用指南
  • 打家劫舍 打家劫舍II 打家劫舍III
  • 三分钟简单了解一些HTML的标签和语法_01
  • error Parsing error: invalid-first-character-of-tag-name vue/no-parsing-error
  • Android系统开发(二十):字体活起来,安卓自定义字体改造指南
  • Ext2 文件系统:数字世界的基石,深度解码超时空存储魔法
  • python麻辣香锅菜品推荐
  • 部分“古董机”编程读取文件时出现文件损坏的简易处理办法(简单粗暴) - 随笔
  • 鸿蒙操作系统的安全架构
  • 面试:Hadoop,块,HDFS的优缺点,HDFS的读写流程
  • 安卓本地Maven仓的实现
  • 51c~SLAM~合集1
  • 数据结构学习记录-队列
  • STM32补充——IAP
  • 滑动窗口例题讲解