【Leetcode 161】【GO】相隔为 1 的编辑距离

题目

给定两个字符串 s 和 t ,如果它们的编辑距离为 1 ,则返回 true ,否则返回 false 。

字符串 s 和字符串 t 之间满足编辑距离等于 1 有三种可能的情形:

往 s 中插入 恰好一个 字符得到 t
从 s 中删除 恰好一个 字符得到 t
在 s 中用 一个不同的字符 替换 恰好一个 字符得到 t

解题思路

解题最重要的是分析题目
那么,来看满足条件的三种情况。
首先,前两种其实等同为一种情况。因为情况1是s短于t,且s+1字符 = t,情况2是 s-1字符等于 t,可以转化成 t-1字符 = s。所以前两种情况其实是个等式。只要确保 s 短于 t ,就只需要考虑一种情况。再分析。其实情况12可以等价与较短的 s 与较长的t字符顺序和数量相同,只是 t 多了一个字符。
然后,情况 3 可以得出,s 和 t 长度相等,只有一个字符不一致。

代码分析

func isOneEditDistance(s string, t string) bool {
    byteS := []byte(s)
    byteT := []byte(t)
    lenS := len(byteS)
    lenT := len(byteT)
    if lenS > lenT {
        return isOneEditDistance(t, s)
    }
    if lenT - lenS > 1 {
        return false
    }

    if lenS == 0 && lenT == 1 {
        return true
    }

    idx := 0
    flag := false

    if lenS == lenT {
        for _, cur := range byteT {
            if cur != byteS[idx] {
                if flag {
                    return false
                }
                flag = true
            }
            idx++
        }
        if !flag {
            return false
        }
        return true
    }

    for _, cur := range byteT {
        if cur != byteS[idx] {
            if flag {
                return false
            }
            flag = true
        } else {
            idx++
        }
        if idx == lenS {
            return true
        }
    } 

    return true
}

有几个注意点。
首先,当 s > t 时,可以交换两个传参,重新调用本方法,就能确保 s <= t 了。
然后,为了方便解析,可以根据 s 和 t 是否相等来判断是情况 2还是情况 3 。
情况 2 需要s 和 t 同时遍历,只有一次 t 和 s 不一致,将 t 跳到下一位。
情况 3 同样同时遍历,但区别是要 s 和 t 同时跳到下一位。完成遍历即可。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值