161. 相隔为 1 的编辑距离

给定两个字符串 s 和 t,判断他们的编辑距离是否为 1。

注意:满足编辑距离等于 1 有三种可能的情形

  1. 往 s 中插入一个字符得到 t
  2. 从 s 中删除一个字符得到 t
  3. 在 s 中替换一个字符得到 t

示例 1:

输入: s = "ab", t = "acb"
输出: true
解释: 可以将 'c' 插入字符串 s 来得到 t。

示例 2:

输入: s = "1203", t = "1213"
输出: true
解释: 可以将字符串 s 中的 '0' 替换为 '1' 来得到 t。

思路

两个字符串必有公共部分且公共部分只有一个元素,才能用一次操作编辑成一样。

只需用双指针把公共部分筛掉,考察非公共部分。

  • 两个字符串不等时,非公共部分差一个元素,用一次插入或删除变成一样。

  • 两个字符串相等时,非公共部分元素不同,用一次修改操做将两个字符串变成一样。

s="ab" 与 t="acb"
排除公共部分,就是考察 '' 与 'c',显然只要在 s 中插入 'c' 即可
s="1203" 与 t="1213"
排除公共部分,就是考察 '0' 与 '1',显然只要把 s 中的 `0` 变成 `1`即可

复杂度

时间复杂度:O(N)O(N)O(N),数组所有元素最多遍历一次

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

代码

class Solution {public boolean isOneEditDistance(String s, String t) {int n = s.length(), m = t.length();if (Math.abs(n - m) > 1) return false;if (n > m) return isOneEditDistance(t, s);int i = 0, j = n - 1, k = m -1;while (i <= j) {if (s.charAt(i) != t.charAt(i) && s.charAt(j) != t.charAt(k))break;if (s.charAt(i) == t.charAt(i)) i++;if (s.charAt(j) == t.charAt(k)) { j--; k--; }}return n == m ? i == j : i > j;}
}

Java 代码臃肿,看起来费劲可以看下面 C++ 代码。

class Solution {public:bool isOneEditDistance(string s, string t) {int n = s.size(), m = t.size();if (abs(n - m) > 1) return false;if (n > m) return isOneEditDistance(t, s);int i = 0, j = n - 1, k = m - 1;while (i <= j) {if (s[i] != t[i] and s[j] != t[k]) break;if (s[i] == t[i]) i++;if (s[j] == t[k]) j--, k--;}return n == m ? i == j : i > j;}
};

161. 相隔为 1 的编辑距离相关推荐

  1. LeetCode 161. 相隔为 1 的编辑距离(DP/遍历)

    文章目录 1. 题目 2. 解题 2.1 DP超时 2.2 一次遍历 1. 题目 给定两个字符串 s 和 t,判断他们的编辑距离是否为 1. 注意: 满足编辑距离等于 1 有三种可能的情形: 往 s ...

  2. leetcode161. 相隔为 1 的编辑距离

    给定两个字符串 s 和 t,判断他们的编辑距离是否为 1. 注意: 满足编辑距离等于 1 有三种可能的情形: 往 s 中插入一个字符得到 t 从 s 中删除一个字符得到 t 在 s 中替换一个字符得到 ...

  3. leetcode刷题目录总结

    题目 题目 技巧 相似的题目 其他 1. 无序数组中找出目标为target的两个数 先定义下一个数,然后找两位的数是否存在 高频, 大厂刷题班, 第27节 2.逆序链表两数相加 链表.各位加法 高频, ...

  4. Leetcode题目分类指南(单独刷题或学习算法书籍配合使用)

    Leetcode题目分类指南 笔者在学习<算法导论>同时,希望能够配合Leetcode的题目进行分类模块化练习,该分类为笔者自己根据做题学习经验,结合<算法导论>的内容,给出L ...

  5. 如何学好C语言--你的学渣朋友告诉你

    光说不练假把式,光练不说傻把式,又练又说真把式. 真实感受,不是我不想学,是我真的不知道我哪里不会啊和得怎么做啊?本文作者当初就是这么废掉的 推荐两个练习的网站 (一)C语言网 https://www ...

  6. LeetCode 700题 题解答案集合 Python

    2019.5.12更新至题号796,目前共有265题. 2019.5.26更新至题号72, 目前共有347题. 2019.6.16更新至题号70,目前共有382题. 2019.7.7更新至题号5120 ...

  7. 字符串 leetcode 总结

    字符串 我的答案 题号 题目 通过率 难度 总结 掌握   #3 无重复字符的最长子串 33.4% 中等       #5 最长回文子串 29.0% 中等       #6 Z 字形变换 47.1% ...

  8. 双指针(Double Pointer)

    双指针 [209. 长度最小的子数组](https://leetcode.cn/problems/minimum-size-subarray-sum/) [713. 乘积小于 K 的子数组](http ...

  9. LeetCode1-620题汇总,希望对你有点帮助!

    时间很快,公众号发布的LeetCode题目,已经达到620道题了.今天把发布的1-620篇LeetCode文章整理一下,平时文章都放在比较末尾,阅读量都不高,相信很多人都没看过,如果对于算法感兴趣的, ...

最新文章

  1. Kafka 原理以及分区分配策略剖析
  2. Java Arrays.Sort方法重写
  3. 全国计算机等级2级试题,全国计算机等级考试二级QBASIC试题
  4. 牛客题霸 [用两个栈实现队列] C++题解/答案
  5. EJB继承与Java继承不同
  6. 【渝粤题库】广东开放大学社会学概论形成性考核
  7. redis rdb aof区别_聊一聊RDB、AOF在redis持久化里的底层原理
  8. ORACLE系统表和视图
  9. jQuery 图片轮播插件–GalleryView
  10. STM32串口接收以及发送大全
  11. 【答题助手】只用2秒!搞定百万英雄 芝士超人 冲顶大会
  12. 分子克隆有哪些最新发表的毕业论文呢?
  13. 算法笔记习题 2-9小节
  14. Windows 常见文件扩展名解释
  15. [我一直想看到的文章 好好保存赏析]微软、英特尔和摩根的比较
  16. TI公司Tina-ti和FilterProDesktop下载地址
  17. hp6960无法连接计算机,支持多种打印方式 惠普OfficeJet Pro 6960评测
  18. ChemDraw 2D与ChemBio 3D之间的信息转换
  19. python计算平均分_自动计算平均学分绩点的Python实现
  20. 3D游戏建模入门初级教学:制作纹理逼真的法线贴图

热门文章

  1. 基于 Vue 和 TS 的 Web 移动端项目实战心得
  2. 地铁大数据挖掘之数据预处理——从原始一卡通数据提取城市地铁客流(一)
  3. 高通语音专题--呼叫保持流程和日志分析
  4. 如何快速搭建网站(小白教程)(48小时内完成)
  5. 【Activiti工作流】11.并行网关
  6. Paypal收款费用和支持的货币种类
  7. SAP PA 15模块资源下载
  8. 生产者剩余的几何解释
  9. ntag213和215有什么区别_【NTAG213/215/216芯片读写器NFC读卡器发卡器】 - 太平洋安防网...
  10. How to exploit MySQL index optimizations