当前位置: 首页 > article >正文

【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 同时跳到下一位。完成遍历即可。


http://www.kler.cn/a/18169.html

相关文章:

  • 随时随地编码:香橙派Zero3上安装Code Server远程开发指南
  • WordPress HTTPS 配置问题解决方案
  • flutter 发版的时候设置版本号
  • LabVIEW开发相机与显微镜自动对焦功能
  • 微服务架构面试内容整理-API 网关-Gateway
  • LeetCode【0031】下一个排列
  • @Async异步线程:Spring 自带的异步解决方案
  • 同步辐射散射数据处理:从测量到分析的全流程解析
  • Ubuntu18.04系统及相关软件安装恢复过程
  • MG100-Hi3798MV100-当贝纯净桌面卡刷固件包
  • 华为OD机试真题-24点运算【2023】【JAVA】
  • Linux安装canal
  • Go type关键字定义新类型和类型别名的区别
  • io,nio,aio区别
  • 测试开发如何进阶?需要哪些能力?吐血整理-你的进阶之路...
  • 深入理解移动端布局:Viewport与设备像素比
  • linux命令之kill详解
  • UICollectionView 实现整页翻动(每页3个cell)
  • Android 9.0 Camera2 拍照功能默认选前摄像头
  • 【论文阅读】A Comparative Study on Camera-Radar Calibration Methods
  • 如何提高执行力
  • 图数据库游记
  • 代码随想录算法训练营day28 | 93.复原IP地址,78.子集,90.子集II
  • 回文数:探索数字世界中的对称美学
  • spark练习例子——单词计数——pyspark
  • Java基础--->基础部分(2)【Java值传递】