LeetCode 014 Python&Go版本

点击上方“Python学习开发”,选择“加为星标”

第一时间关注Python技术干货!


题目名称最长公共前缀

题目要求

编写一个函数来查找字符串数组中的最长公共前缀。
如果不存在公共前缀,返回空字符串""。
示例 1:
输入: ["flower","flow","flight"]
输出: "fl"
示例 2:

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

注意:所有输入只包含小写字母 a-z 。

解题思路

首先我们要知道什么是前缀,简单理解,前缀就是字符串开头的部分字母。前缀的长度也是不固定。比如单词flower,它的前缀可以是f,fl,flo,flow,flowe,flower。单词fly的前缀就是,f,fl,fly。只要从头开始数就可以了,但是我们要求是多个字符串之间的公共前缀,那么我们就要找到他们各自的前缀,以及公众的部分。分析发现flower和fly相同的前缀有f和fl。但是我们需要的是最长的前缀所以答案就是fl.

代码分析

Python Version

from typing import List

class Solution:
    def longestCommonPrefix(self, strs: List[str]) -> str: 
        if len(strs) == 0:
            return ""
        prefix = strs[0] #把第一个字符串当做前缀

        for i in range(len(strs)):
            # find会返回prefix在字符串的位置。如果是0那么可以说明是前缀。
            while strs[i].find(prefix) != 0: 
                prefix = prefix[:-1] #从后面开始减少一个看看
                if not prefix:
                    return ""    
        return prefix            

if __name__ == "__main__":
    s= Solution()
    input = ["flower","flow","flight"]
    print(s.longestCommonPrefix(input))        

除此之外,根据Python的语法特征,我们可以使用zip来解决这个问题。

#根据Python的特效
class Solution:
     def longestCommonPrefix(self, strs: List[str]) -> str:     
         s = ""
         print("*strs is ",*strs)

         #通过zip和解包strs可以对这几组字符串同时迭代。
         for i in zip(*strs):
             print("i",i)
             #根据set的特征,如果对元素去重之后个数为1那么可以得知,这几个元素是相等,否则跳出循环,因为上一组就是我们需要找的元素了。
             if len(set(i)) == 1:
                 s += i[0]
             else:
                 break           
         return s  

Go Version

package main
import(
"fmt"
 "strings"
)

func longestCommonPrefix(strs []string) string {
    if len(strs) == 0 {
        return ""
    }
    prefix := strs[0]
    for _,value:=range strs {
        for strings.Index(value,prefix)!=0{
            prefix = prefix[0:len(prefix)-1]
            if prefix==""{
                return ""
            }

        }

    }
    fmt.Println(prefix)
    return prefix


}

func main(){
    l:=[]string{"flower","flow","flight"}
    longestCommonPrefix(l)
}

推荐阅读

Python 爬虫面试题 170 道:2019 版

LeetCode-001  Python&Go版本

LeetCode 007 Python&Go版本

LeetCode 009 Python&Go版本

添加微信[gopython3].回复:回复Go或者Python加对应技术群。

标题基于SpringBoot的计算思维与人工智能学习网站设计与实现AI更换标题第1章引言介绍计算思维与人工智能学习网站的研究背景、意义、国内外现状以及论文方法和创新点。1.1研究背景与意义阐述计算思维与人工智能教育的重要性及网站建设的必要性。1.2国内外研究现状分析国内外计算思维与人工智能学习网站的发展现状。1.3研究方法及创新点简述论文采用的研究方法及网站设计的创新之处。第2章相关理论总结计算思维、人工智能及网站开发相关理论,为研究提供理论基础。2.1计算思维理论概述介绍计算思维的基本概念、核心要素及应用领域。2.2人工智能基础理论阐述人工智能的基本原理、关键技术及发展趋势。2.3网站开发技术基础概述SpringBoot框架、前端技术及数据库技术等相关知识。第3章网站设计详细介绍基于SpringBoot的计算思维与人工智能学习网站的设计方案。3.1网站架构设计网站的整体架构,包括前端、后端及数据库设计。3.2功能模块设计阐述网站各功能模块的设计,如用户管理、课程学习、在线测试等。3.3数据库设计介绍数据库的设计思路,包括表结构、关系及索引设计等。第4章网站实现阐述基于SpringBoot的计算思维与人工智能学习网站的具体实现过程。4.1开发环境搭建介绍开发所需的软件、硬件环境及配置步骤。4.2关键技术实现详述SpringBoot框架的集成、前后端交互及数据库操作等关键技术的实现。4.3网站测试与优化网站测试的方法、过程及优化策略,确保网站稳定运行。第5章研究结果与分析呈现网站设计与实现后的效果,通过用户反馈、数据统计等方式进行分析。5.1用户反馈分析收集并分析用户对网站的反馈意见,评估网站的用户体验。5.2数据统计与分析统计网站访问量、用户活跃度等数据,分析网站的使用情况。5.3对比方法分析将本网站与其他类似网站进行对比分析,突出本网站的特色和优势。第6章结论与展望总结网
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值