【LeetCode】14,最长公共前缀。 难度等级:简单。知识点:字符串的大小比较(比较 ascii码的大小)

news2025/1/6 18:24:53

文章目录

    • 一、题目
    • 二、我的解法:双指针逐个字符比较
    • 三、巧妙解法:字符串的字典序比较
    • 四、知识点:字符串的字典序比较

一、题目

在这里插入图片描述

二、我的解法:双指针逐个字符比较

双指针逐个字符比较是最容易想到的方法,但由于测试用例中包含很多空字符串,导致经过出现下标越界的情况,因此我写了很多 if-else 来判断字符串是否为空已经是否越界,导致代码非常冗余,并且非常不便于理解。

class Solution:
    def longestCommonPrefix(self, strs: List[str]) -> str:
        length=len(strs)
        if length==1:
            return strs[0]
        
        ans=""
        for j in range(0,sys.maxsize):
            label=0
            temp=""
            # 防止 strs[0] 为空或 strs[0] 下标越界
            if len(strs[0])!=0 and len(strs[0])>len(ans):
                temp=strs[0][j]
            else:
                return ans
            for i in range(1,length):
                # 防止 strs 中的数组均为空字符串,如 strs = ["","",""]
                if len(strs[i])!=0:
                    if len(strs[i])<=len(ans):
                        return ans
                    elif strs[i][j]==temp:
                        label+=1
            if label==length-1:
                ans+=temp
            else:
                break
        return ans

三、巧妙解法:字符串的字典序比较

由于题目中说 strs[i] 仅由小写英文字母组成,那么就可以根据 字符串的字典序比较来找到 ascii码 最小和最大的字符串,只需要找到最小和最大的字符串的最长公共前缀即可。

注意:是找到 ascii码 最小和最大的字符串,而不是最短和最长的字符串。找最短和最长的字符串时候错误的,如:

输入:["flower","flow","flight"]
输出:"flow"
正确答案:"fl"

code 3:

class Solution:
    def longestCommonPrefix(self, strs: List[str]) -> str:
        minStr=min(strs)
        maxStr=max(strs)
        minLen=len(minStr)
        ans=""
        for i in range(minLen):
            if minStr[i]==maxStr[i]:
                ans+=minStr[i]
            else:
                break
        return ans

四、知识点:字符串的字典序比较

code 3 中的 min(strs) 和 max(strs) 是查找 ascii码 最小和最大的字符串,可以通过代码验证一下:

strs = ["ab", "abc", "d"]
print(min(strs))    # ab
print(max(strs))    # d

字符串直接比大小比的是逐个元素的 ascii码 的大小,而不是比较字符串长度:

print("abc" > "b")    # False,因为 "b" 的 ascii码比 "abc" 的首元素 "a" 的 ascii码更大

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/605729.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

torch_scatter.scatter()的使用方法

学习目标&#xff1a; 在学习PyG时&#xff0c;遇到了 scatter 这个函数&#xff0c;经过学习加上自身的理解&#xff0c;记录如下以备复习 学习内容&#xff1a; src&#xff1a;表示输入的tensor&#xff0c;接下来被处理&#xff1b;index&#xff1a;表示tensor对应的索引…

【C++】C++11

文章目录 1、C11的简介2、 统一的列表初始化2-1、&#xff5b;&#xff5d;初始化2-2、std::initializer_list 3、声明3-1、auto3-2、decltype3-3、nullptr 4、范围for循环5、智能指针6、STL中一些变化6-1、STL新容器和容器新方法6-2、final和override 7、右值引用和移动语义7-…

【网络协议详解】——OSPF协议(学习笔记)

目录 &#x1f552; 1. 概述&#x1f552; 2. 相关概念&#x1f558; 2.1 基本思想&#x1f558; 2.2 区域及路由&#x1f558; 2.3 链路状态数据库&#x1f564; 2.3.1 点到点网络&#x1f564; 2.3.2 点到多点网络&#x1f564; 2.3.3 广播网络与非广播多址接入网络&#x1f…

嵌入式开发常用的几招调试方法

嵌入式系统调试时相对比较麻烦一些&#xff0c;特别是在定位一些疑难问题时&#xff0c;调试手段就显得非常重要。废话不多说&#xff0c;直接上方法。 方法一&#xff1a;利用特殊文件名字的文件存在与否来触发调试代码是否运行。比如有些特殊状况下&#xff0c;我们需要保存一…

文心一言 VS 讯飞星火 VS chatgpt (30)-- 算法导论5.2 2题

二、在 HIRE-ASSISTANT 中&#xff0c;假设应聘者以随机顺序出现&#xff0c;你正好雇用两次的概率是多少&#xff1f; 文心一言&#xff1a; 我们可以先计算出在HIRE-ASSISTANT中&#xff0c;雇佣一个应聘者的概率为3/4&#xff0c;然后计算出雇佣两次应聘者的概率为3/4 * 3…

教你用Appium搭建Android自动化测试框架(详细教程)

如题&#xff0c;本文附有仓库地址以及代码&#xff0c;目录如下&#xff1a; 1.下载安装appium 2.配置并使用appium 3.配置工程 一、下载安装appium 下载appium-desktop的mac版本&#xff0c;我选择用1.17.1版本&#xff0c;最新的版本1.22.0&#xff0c;拆分一个桌面应用…

k-means算法超级详解-转载

这是搬运的 一、 实验准备 1.1 实验概述 所谓聚类算法是指将一堆没有标签的数据自动划分成几类的方法&#xff0c;属于无监督学习方法&#xff0c;这个方法要保证同一类的数据有相似的特征。根据样本之间的距离或者说是相似性&#xff08;亲疏性&#xff09;&#xff0c;把越…

牛郎织女的幸福生活(活锁)

从前&#xff0c;有一对夫妻&#xff0c;男的叫牛郎&#xff0c;女的叫织女&#xff0c;他们很好地传承了中华民族的谦让美德&#xff0c;每次吃饭时都会优先考虑对方&#xff0c;如果对方饿的话&#xff0c;就让给对方吃&#xff0c;等对方吃饱了自己才吃&#xff0c;这种美德…

SpringBoot整合OSS文件上传

一、注册阿里云账号并开通OSS服务 1、登录阿里云账号 2、创建一个bucket 3、创建子用户 对自用户分配权限&#xff0c;打开操作OSS的全部权限&#xff08;也可根据业务需求进行更改&#xff09; 4、配置上传跨域规则 任何来源: *允许方法: POST任何请求头Headers: * 二、…

pytorch实现图像分类任务-手写数字识别(一)

Pytorch手写数字识别 Minst数据集介绍 Size: 2828 灰度手写数字图像 Num: 训练集 60000 和 测试集 10000&#xff0c;一共70000张图片 Classes: 0&#xff0c;1&#xff0c;2&#xff0c;3&#xff0c;4&#xff0c;5&#xff0c;6&#xff0c;7&#xff0c;8&#xff0c;9 一…

pybullet学习(一)——安装与入门pybullet

PyBullet介绍 PyBullet 基于著名的开源物理引擎 bullet 开发&#xff0c;封装成了 Python 的一个模块&#xff0c;用于机器人仿真和学习。PyBullet 支持加载 URDF、SDF、MJCF 等多种机器人描述文件&#xff0c;并提供正/逆向运动学、正/逆向动力学、碰撞检测、射线相交查询等功…

FreeRTOS多任务系统

FreeRTOS 文章目录 FreeRTOS1 单任务和多任务系统1.1 单任务系统1.2 多任务系统 2 FreeRTOS 任务状态3 FreeRTOS 任务优先级4 Free RTOS 任务调度方式4.1 抢占式调度4.2 时间片调度 5 FreeRTOS 任务控制块6 FreeRTOS 任务栈 1 单任务和多任务系统 1.1 单任务系统 单任务系统的…

手把手教你搭建网站(零基础,不用写代码)

没有前言直接开始正文&#xff0c;搭建一个博客需要服务器&#xff0c;域名&#xff0c;博客程序。 博客程序常用的有wordpress&#xff0c;z-blog&#xff0c;typecho等等&#xff0c;其中wordpress和z-blog最为简单&#xff0c;typecho需要一定的技术含量&#xff0c;这里暂…

17.4:图的拓扑排序

拓扑序一定是有向无环图。 拓扑排序不唯一 拓扑排序方法一&#xff1a; 利用入度为零进行排序 思路&#xff1a;谁的入度为0&#xff0c;谁就是开始节点&#xff0c;将开始节点打印完之后&#xff0c;将开始节点的直接邻居的入度减1&#xff0c;然后重复。 package algorith…

【软件测试】稳定性和可靠性测试在软件开发中的重要性

软件测试的某些方面经常会在那些刚接触流程的人中造成混淆——例如在稳定性和可靠性测试之间划清界限。 两者通常可以互换使用&#xff0c;并且有一个共同的目标&#xff0c;即确保系统可以在选定的时间范围内稳定运行。 在这篇文章中&#xff0c;我们将仔细研究什么是稳定性测…

10年Java开发,准备去腾讯了~

大家好&#xff0c;最近有不少小伙伴在后台留言&#xff0c;又得准备面试了&#xff0c;不知道从何下手&#xff01; 不论是跳槽涨薪&#xff0c;还是学习提升&#xff01;先给自己定一个小目标&#xff0c;然后再朝着目标去努力就完事儿了&#xff01; 为了帮大家节约时间&a…

chatgpt赋能python:Python分词,助力文本处理和搜索引擎优化

Python分词&#xff0c;助力文本处理和搜索引擎优化 作为一种广泛应用于文本处理的编程语言&#xff0c;Python在分词处理方面也有着得天独厚的优势。Python分词不仅可以帮助我们完成文本处理任务&#xff0c;还能够为搜索引擎优化提供便利。 什么是分词&#xff1f; 分词&a…

集线器与交换机的区别

1.集线器与交换机的区别 笔记来源&#xff1a; 湖科大教书匠&#xff1a;集线器与交换机的区别 声明&#xff1a;该学习笔记来自湖科大教书匠&#xff0c;笔记仅做学习参考 1.1 集线器 早期总线型以太网的机械连接点不太可靠 使用双绞线和集线器相对可靠 集线器可以在物理层…

计算机网络和因特网概述

一.计算机网络和因特网 计算机网络是指多台计算机通过通信线路或其他连接方式相互连接起来&#xff0c;实现信息交换和共享的系统。而因特网是利用标准化协议互联起来的全球性计算机网络&#xff0c;是计算机网络的一种特殊形式。 1.1 什么是因特网 1.1.1 从具体构成描述 因…

day04——特征处理之特征降维

特征处理之特征降维 一、特征选择Filter(过滤式)1&#xff0c;低方差特征过滤2、相关系数 Embedded (嵌入式) 二、主成分分析&#xff08;PCA&#xff09; 特征降维&#xff1a;如果特征本身存在问题或者特征之间相关性较强&#xff0c;对于算法学习预测会影响较大。降维是指在…