LeetCode 面试题 01.05. 一次编辑
发布时间:2026-10-11 | 浏览:1
时间比较少,之后只记重点思路,就不写长篇了
字符串有三种编辑操作: 插入一个字符、删除一个字符或者替换一个字符。 给定两个字符串,编写一个函数判定它们是否只需要一次(或者零次)编辑。
注意到这题的要求比较特殊,只需要一次编辑。就像题目说的那样,一次编辑有增、删、改三种可能性,但是无论如何改动前后的字符串长度差异最多为 1(增:1,删:1,改:0)。因此分别从前往后和从后往前遍历,分别找到前缀和后缀的最大公共部分,然后校验前缀 + 后缀的长度是否大等于 较长字符串的长度 - 1 即可。时间复杂度 O ( n ) ,空间复杂度 O ( 1 ) 。
注意空字符串导致指针越界的 corner case 。
类似于 Levenstein Distance 的思路,但是这题要求比较特殊,只需要一次编辑,因此可以简化很多。具体代码之后补充。
最常规的思路,LC 上有一个清楚的题解。
这道题最优题解巧妙的地方在于利用了“一次编辑”的特殊性,使用双指针分别从前向后和从后向前比较,最后判断没有被比较到的字符串长度是否小于等于 1。不过需要考虑空字符串的 corner case。