题目与示例
题目
题目内容
字符串有三种编辑操作:插入一个字符、删除一个字符或者替换一个字符。 给定两个字符串,编写一个函数判定它们是否只需要一次(或者零次)编辑。
来源:力扣(LeetCode)
示例 1:
输入:
first = “pale”
second = “ple”
输出: True
示例 2:
输入:
first = “pales”
second = “pal”
输出: False
一、思路
该题目要求我们返回是否可以通过一次编辑来使first == second,所谓的编辑包括插入一个字符、删除一个字符或者替换一个字符。
由题意易知,first和second字符串之间至多有1处不同时,才能通过一次修改来达到题目要求,所以当两个字符串长度的差值的绝对值比1大时,我们直接返回false即可。
我们使用双指针来解决这个问题,fir_p作为first字符串的指针指向first中的每一个字符,sec_p作为second字符串的指针指向second中的每一个字符。used用于表示当前是否已经使用了一次编辑的机会,如果使用了即为true。
我们分为三种情况进行遍历,当两个字符串长度相等时,指针遇到不一样的内容时,将used设置为true,然后按照顺序访问后面的内容即可;当两个字符串长度不相等时,指针遇到不一样的内容时,将used设置为true,然后让较长字符串的指针后移且保持较短字符串的指针不动。一直遍历到字符串的最后一个元素即可。
如果我们在使用双指针对两个字符串进行遍历的时候,发现used==true的条件下,两个指针所指向的内容也不同时,说明我们需要大于1次的编辑,返回false即可。否则返回true。
二、解题代码
解题代码如下:
class Solution