面试题 01.05. 一次编辑

方法一:DP

1、dp数组定义

dp[ i ] [ j ] 表示以i-1,j-1结尾的两个字符串的需要最小的编辑距离。

存在一次编辑的时候一共有四种情况:

1. len ( str1) > len ( str2) , 相当于str2需要增加一个字符,或者 str1 删除一个字符。

2. len ( str1 ) == len ( str2 ),相当于替换str1一个字符, 或者替换 str2 一个字符。

3. len ( str1) < len ( str2),相当于str1增加一个字符,或者str2删除一个字符。

4. str1.equals(str2) 符合条件的情况

2、状态转移方程

前三种情况  可以合并为同一种情况,就是做了一次编辑:

dp [ i ] [ j ]  = min { dp[ i-1 ] [ j ], dp[ i ] [ j - 1 ], dp[ i ] [ j ] } + 1 ;

第四种情况是截止到某个( i , j )位置都没有做修改的时候:

dp[ i ] [ j ] = dp[ i - 1 ] [ j - 1 ];

3、时空复杂度:

时间O(n*n) 空间O(n*n)

class Solution {public boolean oneEditAway(String first, String second) {int m = first.length(), n = second.length();int[][] dp = new int[m+1][n+1];for(int i = 0; i <= m; i++) {dp[i][0] = i;}for(int j = 0; j <= n; j++) {dp[0][j] = j;}for(int i = 1; i <= m; i++) {for(int j = 1; j <= n; j++) {if(first.charAt(i-1) == second.charAt(j-1) ) {dp[i][j] = dp[i-1][j-1];} else {dp[i][j] = Math.min(dp[i-1][j-1], Math.min(dp[i-1][j], dp[i][j-1])) + 1;}}}return dp[m][n] == 1 || dp[m][n] == 0;}
}

方法二:模拟

1、模拟流程:

1. 首先确定做了一次修改 字符串长度相差1 或者 0即可

2. 两个同步指针i j ,相同的时候同步后移,不相同的时候分 两种情况

①相差一个字符:(插入引起的不同)

len( str1 ) - len(str2) == 1时:

j--;

不能用 i++,有可能会跳过连续两个编辑的情况(一个增加一个修改)

len( str1 ) - len(str2) == -1时:

i--;

count--;

不能用 j++,有可能会跳过连续两个编辑的情况(一个增加一个修改)

例如:整体相差一个但是出现连续两个字符做了修改

"teacher"
"bleacher"

②字符数目相同:(修改引起的不同)

count--;

2、时空复杂度:

时间O(n) 空间O(1)

class Solution {public boolean oneEditAway(String first, String second) {int len = first.length()-second.length();if (len > 1 || len < -1) {  //只能相差一个字符return false;}int count = 1;for (int i = 0, j = 0; i < first.length() && j < second.length(); i++, j++) {if (first.charAt(i) != second.charAt(j)) {//替换一个字符的直接默认是符合条件的if (len == 1) { //second需要添加一个字符,移动元素少的字符串的指针,不然容易跳j--;  }else if (len == -1) { //second需要删除一个字符,移动元素少的字符串的指针,不然容易跳i--; }count--;}if (count < 0) {//最多编辑一次return false;}}return true;   }
}

面试题 01.05. 一次编辑相关推荐

  1. 程序员面试金典 - 面试题 01.05. 一次编辑(编辑距离,DP)

    1. 题目 字符串有三种编辑操作:插入一个字符.删除一个字符或者替换一个字符. 给定两个字符串,编写一个函数判定它们是否只需要一次(或者零次)编辑. 示例 1: 输入: first = "p ...

  2. 面试题01.05.一次编辑

    字符串有三种编辑操作:插入一个英文字符.删除一个英文字符或者替换一个英文字符.给定两个字符串,编写一个函数判断他们是否只需要一次(或者零次)编辑. 示例一: 输入:first="pale&q ...

  3. 文巾解题 01.05. 一次编辑

    1 题目描述 2 解题思路: 建立一个指针i+一个错位个数计数器num(表示长的字符的第i+num位和短的字符的第i位匹配) class Solution:def oneEditAway(self, ...

  4. python【力扣LeetCode算法题库】面试题 01.07- 旋转矩阵

    面试题 01.07. 旋转矩阵 给你一幅由 N × N 矩阵表示的图像,其中每个像素的大小为 4 字节.请你设计一种算法,将图像旋转 90 度. 不占用额外内存空间能否做到? 示例 1: 给定 mat ...

  5. python【力扣LeetCode算法题库】面试题 01.06-字符串压缩

    面试题 01.06. 字符串压缩 字符串压缩.利用字符重复出现的次数,编写一种方法,实现基本的字符串压缩功能.比如,字符串aabcccccaaa会变为a2b1c5a3.若"压缩"后 ...

  6. LeetCode Algorithm 面试题 10.05. 稀疏数组搜索

    面试题 10.05. 稀疏数组搜索 Ideas 没啥好说的,二分搜索就完了,注意过滤空字符串. Code Python from typing import Listclass Solution:de ...

  7. [Leedcode][JAVA][面试题 01.07][找规律][旋转数组]

    [问题描述] [面试题 01.07. 旋转矩阵] 示例 1:给定 matrix = [[1,2,3],[4,5,6],[7,8,9] ],原地旋转输入矩阵,使其变为: [[7,4,1],[8,5,2] ...

  8. 面试题 03.05. 栈排序

    面试题 03.05. 栈排序 思路:2个栈,data存储顺序,help帮助data存储排序 class SortedStack { public:stack<int> data, help ...

  9. 面试题 02.05. 链表求和

    面试题 02.05. 链表求和 给定两个用链表表示的整数,每个节点包含一个数位. 这些数位是反向存放的,也就是个位排在链表首部. 编写函数对这两个整数求和,并用链表形式返回结果. 示例: 输入:(7 ...

最新文章

  1. [云炬创业基础笔记]第六章商业模式测试6
  2. ICCV 2019 | 通过多标签相关性研究提升神经网络视频分类能力
  3. .NET Core中间件与依赖注入的一些思考
  4. 【UVA - 11292】Dragon of Loowater (贪心,水题,模拟,twopointer双指针)
  5. LeetCode 775. 全局倒置与局部倒置(归并排序/二分查找/一次遍历)
  6. mmap 系统调用 的使用
  7. Spring事务管理的四种方式(以银行转账为例)
  8. 电脑公司最新稳定win7系统下载
  9. Java程序员的职业规划
  10. t3系统建账请到服务器端修改,用友T3标准版常见问题及处理方法(一)
  11. mysql 官网 update_UPDATE
  12. Xcode 秘籍 —— 很多 iOS 开发者都不知道的基本操作
  13. gradient设置上下渐变_CSS3 线性渐变(linear-gradient)
  14. 移动端手机 摇一摇加声音
  15. 如何建立企业级数据分析能力?
  16. UGUI源码解析——ContentSizeFitter
  17. day69 【哈希,HashSet,HashMap】
  18. websocket协议详解
  19. 项目六总结 创建与使用存储过程
  20. GUI线程安全详解(三)

热门文章

  1. 正则表达式学习(二)
  2. 如何看待master战胜柯洁等多为围棋高手?
  3. oracle range用法,Oracle 分区表——Range分区
  4. loadlibrary 失败 java_LoadLibrary失败,错误代码为14001
  5. Vmware虚拟机教程之VMware workstation 虚拟机兼容性问题
  6. 我发现买不起自己出版的书了,这到底是咋回事?
  7. 接口联调篇:答题页实现随机抽题、答题计算并更新积分等功能
  8. PyQt5 基本语法(四):输入控件
  9. USACO 5.1 Starry Night(模拟)
  10. 【视频】技不压身,多学点没有坏处~~~