CSDN话题挑战赛第1期
活动详情地址:https://marketing.csdn.net/p/bb5081d88a77db8d6ef45bb7b6ef3d7f
参赛话题:Leetcode刷题指南
话题描述:代码能力是一个程序员的基本能力,而除了做项目之外,大家接触到的最常规的提升代码能力的方法基本就是刷题了,因此,加油刷题,冲刺大厂!
创作模板:Leetcode刷题指南
文章目录
- 💎一、面试题 01.05. 一次编辑
- 🏆1.题目描述
- 🏆2.原题链接
- 💎二、解题报告
- 🏆1.思路分析
- 🏆2.代码详解
- 🏆3.按步骤分析
💎一、面试题 01.05. 一次编辑
🏆1.题目描述
字符串有三种编辑操作:插入一个字符、删除一个字符或者替换一个字符。 给定两个字符串,编写一个函数判定它们是否只需要一次(或者零次)编辑。
示例 1:
输入:
first = “pale”
second = “ple”
输出: True
示例 2:
输入:
first = “pales”
second = “pal”
输出: False
🏆2.原题链接
来源:力扣(LeetCode)
💎二、解题报告
🏆1.思路分析
🔑思路:
这个题首先要做的是检查长度情况,如果一个字符串比另一个字符串长或短,其长或短的距离超过1,则立即判断为不成立;其次才是遍历两个字符串,分情况处理字符串。
情况一:字符串长度不等:按照最长或者最短的字符串长度遍历两个字符串,如果遇到不一样的字符,则给较短的字符串在相应的位置添加对应的字符,尽量使得两个字符串一样。如果遍历到最短字符串的末尾没有发现不一样的字符,则此时只需要在短的字符串末尾加一个字符即可使得条件成立,如果在遍历的过程中需要第二次修改短的字符串,则题目不成立。
情况二:字符串长度相等:这个情况比较简单,只需要同步遍历两个字符串,一旦发现2处不一样就可立即返回结果,否则遍历至结尾返回结果。
🏆2.代码详解
class Solution:def oneEditAway(self, first: str, second: str) -> bool:a=len(first)b=len(second)if a-b>1:return Falseif b-a>1:return Falseflag=1i=0if a>b:while i<a:try:if first[i]!=second[i]:if flag:second=second[0:i]+first[i]+second[i:]flag=0else:return Falsei+=1except:return Truereturn Trueelif a<b:while i<b:try:if second[i]!=first[i]:if flag:first=first[0:i]+second[i]+first[i:]flag=0else:return Falsei+=1except:return Truereturn Trueelse:for i,j in zip(first,second):if i!=j:if flag:flag=0else:return Falsereturn True
🏆3.按步骤分析
if将整个情况具体分为三种,a>b,a<b,a=b,其中a>b和a<b其实是一种情况,它们是两个镜像的操作,在这里我选择以最长的字符串长度进行遍历,这样一旦遍历到最短的字符串尾巴,就可以立即知道结果了。
代码利用flag标志位来记录操作次数,如果操作次数大于1则题目条件不成立,反之则成立。
CSDN话题挑战赛第1期
活动详情地址:https://marketing.csdn.net/p/bb5081d88a77db8d6ef45bb7b6ef3d7f