判定字符串是否只需要一次(或者零次)编辑问题

本文介绍了一种使用双指针技术解决字符串匹配问题的方法,通过从字符串的两端向中间遍历来判断两个字符串是否在一编辑距离内。这种方法简单直接,时间复杂度为O(n),空间复杂度为O(1)。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在这里插入图片描述
这题自己想的过于复杂,其实用双指针分别从字符串的头尾遍历就可以了。
以下是来自LeetCode题解:

分别从两个字符串的两边向中间匹配,一旦不一样就停止,这时剩下的first[i,j]first[i,j]和second[i,k]second[i,k]如果长度均小于等于1(注意临界条件)则结果为True,否则False。

时间复杂度:O(n)O(n)
空间复杂度:O(1)O(1)

public bool OneEditAway(string first, string second)
    {
        if(first==second){
            return true;
        }
        int len1=first.Length;
        int len2=second.Length;
        if(Math.Abs(len1-len2)>1){
            return false;
        }
        int i=0,j=len1-1,k=len2-1;
        while(i<len1 && i<len2 && first[i]==second[i]){ // i从左至右扫描
            i++;
        }
        while(j>=0 && k>=0 && first[j]==second[k]){ // j、k从右至左扫描
            j--;
            k--;
        }
        return j-i<1 && k-i<1;
    }

作者:blankError
链接:https://leetcode-cn.com/problems/one-away-lcci/solution/jian-dan-zhi-jie-shuang-zhi-zhen-by-blankerror/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值