首页 > 其他分享 >14. 最长公共前缀

14. 最长公共前缀

时间:2023-10-29 14:23:34浏览次数:30  
标签:return 14 strs len str 字符串 最长 前缀

目录

题目

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

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

示例 1:

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

示例 2:

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

法一、翻译

  • 只考虑了含三个字符串的情况
class Solution:
    def longestCommonPrefix(self, strs: List[str]) -> str:
        i=0
        j=0
        k=0
        re=""
        while i < len(strs[0]) and j < len(strs[1]) and k < len(strs[2]):
            if strs[0][i] == strs[1][j] == strs[2][k]:
                re += strs[0][i]
                i+=1
                j+=1
                k+=1
            else:
                break
        return re
  • 正解
  • 最长公共前缀最多就是最短的字符串,必定不会超过第一个字符串的长度,所以以第一个字符串为基准进行
class Solution:
    def longestCommonPrefix(self, strs: List[str]) -> str:
        if not str:
            return ""
        for i in range(len(strs[0])):#遍历第一个字符串 strs[0] 中的每个字符。
            char = strs[0][i]#存储当前遍历的字符
            for j in range(1,len(strs)):#遍历从第二个字符串到最后一个字符串
                if i == len(strs[j]) or strs[j][i] != char:#逐个比较每个字符串的当前字符与基准字符是否相同。i不变j变表示不同字符串的同一个位置
                    return strs[0][:i]
        return strs[0]

法二、内置函数zip+set

  • 使用zip函数取出每个单词相同位置的字母,转化成集合如果字母相同集合长度为1,如果不同就可以直接返回结果
class Solution:
    def longestCommonPrefix(self, strs: List[str]) -> str:
        ans = ''
        for i in list(zip(*strs)):
            if len(set(i)) == 1:
                ans += i[0]
            else:
                break
        return ans
# 例子
strs = ["flower","flow","flight"]
list(zip(*strs)) = [('f', 'f', 'f'), ('l', 'l', 'l'), ('o', 'o', 'i'), ('w', 'w', 'g')]
set(('f', 'f', 'f')) = 'f'
set(('o', 'o', 'i')) = {'i','o'}

法三、排序

  • 先找出数组中字典序最小和最大的字符串,最长公共前缀即为这两个字符串的公共前缀
# 例子
strs = ["flower","flo","flht"]
#字典序排序后
strs = ["flht","flo","flower"]
class Solution:
    def longestCommonPrefix(self, strs: List[str]) -> str:
        if not strs: return ""
        str0 = min(strs)
        str1 = max(strs)
        for i in range(len(str0)):
            if str0[i] != str1[i]:
                return str0[:i]
        return str0

标签:return,14,strs,len,str,字符串,最长,前缀
From: https://www.cnblogs.com/lushuang55/p/17795826.html

相关文章

  • 2023-2024-1学期 20231424 《计算机基础与程序设计》第5周学习总结
    2023-2024-1学期20231424《计算机基础与程序设计》第5周学习总结作业信息作业属于的课程<班级链接>(2022-2023-1-计算机基础与程序设计)作业要求<作业要求链接>(2022-2023-1计算机基础与程序设计第一周作业)这个作业的目标《计算机科学概论》第6章和《C语言程序......
  • 2023-2024-1 20231403 《计算机基础与程序设计》第五周学习总结
    作业信息这个作业属于哪个课程<班级的链接>(如2022-2023-1-计算机基础与程序设计)这个作业要求在哪里(2023-2024-1计算机基础与程序设计第五周作业)这个作业的目标自学《计算机科学概论》第6章,《C语言程序设计》第4章作业正文https://www.cnblogs.com/lsrmy/p/177......
  • 2023-2024-1 20231416 《计算机基础与程序设计》第五周总结
    作业信息作业属于哪个课程https://edu.cnblogs.com/campus/besti/2023-2024-1-CFAP作业要求在哪里https://edu.cnblogs.com/campus/besti/2023-2024-1-CFAP/homework/13009作业的目标自学《计算机科学概论》第6章和《C语言程序设计》第4章作业正文 https://www......
  • 无重复字符的最长子串(给定一个字符串 s ,请你找出其中不含有重复字符的 最长子串 的长
    importjava.util.*;publicclassSolution{/***代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可***@paramarrint整型一维数组thearray*@returnint整型*/publicintmaxLength(int[]arr){......
  • 最长上升子序列
    importjava.util.*;publicclassSolution{/***代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可**给定数组的最长严格上升子序列的长度。*@paramarrint整型一维数组给定的数组*@returnint整型*/......
  • 代码随想录第四天 | 24. 两两交换链表中的节点 19.删除链表的倒数第N个节点 面试题
    question1:SwapNodesinPairshttps://leetcode.cn/problems/swap-nodes-in-pairs/IwasalittleconfusedatfirstbecauseI'mthinkingwhethershouldIcreatanewhead,butsoonIcameupwiththeideaofcreatpre=Noneandwithan'if-els......
  • 【杂题乱写】AtCoder-ARC114
    AtCoder-ARC114_ANotcoprime\(50\)内的质数只有\(15\)个,可能的答案也就只有\(2^{15}\)个,直接枚举。提交记录:Submission-AtCoderAtCoder-ARC114_BSpecialSubsets就是\(i\)与\(f_i\)连边,每个连通块都是基环树,一定能剥叶子变成环,所以答案就是连通块非空子集个数。......
  • PAT甲级【1014 Waiting in Line】
    考察双向链表importjava.io.IOException;importjava.io.InputStreamReader;importjava.io.StreamTokenizer;importjava.util.LinkedList;publicclassMain{@SuppressWarnings("uncheck")publicstaticvoidmain(String[]args)throwsIOExcepti......
  • P2514 [HAOI2010] 工厂选址 题解
    目录DescriptionSolutionCodeDescription有\(m\)座煤矿,每一座煤矿有\(a_i\)吨煤,第\(i\)座煤矿到第\(j\)号发电厂的运费为\(c_{i,j}\)每吨。有一座发电厂(标号为0),需要恰好\(b\)吨煤矿发电,初始运行费用为\(h\)。还有\(n\)座待运行的发电厂(标号为1~n),每座发电厂初......
  • 商用密码产品 20211314王艺达
    一.28类商用密码产品序号产品种类产品描述认证依据1智能密码钥匙实现密码运算、密钥管理功能的终端密码设备,一般使用USB接口形态。GM/T0027《智能密码钥匙技术规范》、GM/T0028《密码模块安全技术要求》2智能IC卡实现密码运算和密钥管理功能的含CPU(中央处理器)的集......