程序员面试金典 - 面试题 01.05. 一次编辑(编辑距离,DP)
1. 题目
字符串有三种编辑操作:插入一个字符、删除一个字符或者替换一个字符。 给定两个字符串,编写一个函数判定它们是否只需要一次(或者零次)编辑。
示例 1:
输入:
first = "pale"
second = "ple"
输出: True示例 2:
输入:
first = "pales"
second = "pal"
输出: False
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/one-away-lcci
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
2. 解题
请参考我的博客:编辑距离
class Solution {public:bool oneEditAway(string a, string b) {int m = a.size(), n = b.size(), i, j;if(abs(m-n) >= 2)return false;if(m==0 || n==0)return true;vector<vector<int>> dp(m,vector<int>(n,0));//初始化第一行,第一列的编辑距离for(j = 0; j < n; j++){if(a[0]==b[j]) dp[0][j] = j;else if(j != 0) dp[0][j] = 1+dp[0][j-1];else dp[0][j] = 1;}for(i = 0; i < m; i++){if(a[i]==b[0]) dp[i][0] = i;else if(i != 0) dp[i][0] = 1+dp[i-1][0];else dp[i][0] = 1;}//填写状态表for(i = 1; i < m; ++i){for(j = 1; j < n; ++j){if(a[i] == b[j])dp[i][j] = min(dp[i-1][j-1],dp[i-1][j]+1,dp[i][j-1]+1);elsedp[i][j] = min(1+dp[i-1][j-1],dp[i-1][j]+1,dp[i][j-1]+1);}}return (dp[m-1][n-1] < 2);}int min(int x, int y, int z){int m = INT_MAX;if(x < m) m = x;if(y < m) m = y;if(z < m) m = z;return m;}
};
程序员面试金典 - 面试题 01.05. 一次编辑(编辑距离,DP)相关推荐
- 程序员面试金典面试题 01.06. 字符串压缩
前言 本系列文章为<程序员面试金典>刷题笔记. 题目位置:字符串压缩 题集:程序员面试金典 题目 字符串压缩.利用字符重复出现的次数,编写一种方法,实现基本的字符串压缩功能.比如,字符串a ...
- 程序员面试金典 - 面试题 03.05. 栈排序(两栈)
1. 题目 栈排序. 编写程序,对栈进行排序使最小元素位于栈顶. 最多只能使用一个其他的临时栈存放数据,但不得将元素复制到别的数据结构(如数组)中. 该栈支持如下操作:push.pop.peek 和 ...
- 程序员面试金典 - 面试题 01.02. 判定是否互为字符重排(哈希map)
1. 题目 给定两个字符串 s1 和 s2,请编写一个程序,确定其中一个字符串的字符重新排列后,能否变成另一个字符串. 示例 1: 输入: s1 = "abc", s2 = &qu ...
- 程序员面试金典 - 面试题 01.01. 判定字符是否唯一(位运算,牛)
1. 题目 实现一个算法,确定一个字符串 s 的所有字符是否全都不同. 示例 1: 输入: s = "leetcode" 输出: false 示例 2: 输入: s = " ...
- 编写函数判断一个数是否是回文数_程序员面试金典 - 面试题 01.04. 回文排列
题目难度: 简单 原题链接 题目描述 给定一个字符串,编写一个函数判定其是否为某个回文串的排列之一. 回文串是指正反两个方向都一样的单词或短语.排列是指字母的重新排列. 回文串不一定是字典当中的单词. ...
- 程序员面试金典 - 面试题 17.05. 字母与数字(哈希map+思维转换)
1. 题目 给定一个放有字符和数字的数组,找到最长的子数组,且包含的字符和数字的个数相同. 返回该子数组,若存在多个最长子数组,返回左端点最小的.若不存在这样的数组,返回一个空数组. 示例 1: 输入 ...
- 程序员面试金典 - 面试题 08.05. 递归乘法(位运算)
1. 题目 递归乘法. 写一个递归函数,不使用 * 运算符, 实现两个正整数的相乘. 可以使用加号.减号.位移,但要吝啬一些. 示例1:输入:A = 1, B = 10输出:10示例2:输入:A = ...
- 程序员面试金典 - 面试题 16.05. 阶乘尾数(5的因子)
1. 题目 设计一个算法,算出 n 阶乘有多少个尾随零. 示例 1: 输入: 3 输出: 0 解释: 3! = 6, 尾数中没有零.示例 2: 输入: 5 输出: 1 解释: 5! = 120, 尾数 ...
- 程序员面试金典 - 面试题 10.05. 稀疏数组搜索(二分查找)
1. 题目 稀疏数组搜索.有个排好序的字符串数组,其中散布着一些空字符串,编写一种方法,找出给定字符串的位置. 示例1:输入: words = ["at", "" ...
最新文章
- php 空格zhuanyi,php写的将逗号、空格、回车分...-php字符转义的相关注意事项-IIS环境中防止本地用户用fsockopen进行DDOS攻击的方法_169IT.COM...
- python基础知识~ 函数详解2
- 跟我学Kafka源码Producer分析
- 11个好用到起飞的「Python字典」知识点!
- 【小题目】 输出分数对应的等级 >=90-A >=80-B >=70-C >=60-D <60-E,从控制台获取数据
- python list遍历定位元素_python for循环,第二遍定位不到元素?
- 网页设计上机考试原题_Dreamweaver上机考试题目dreamweaver试题库网页制作试题.doc...
- 学习 TList 类的实现[6]
- bzoj2208:[Jsoi2010]连通数
- Spring Bean初始化的几种方法以及执行顺序
- python和c语言的区别-C语言、Java语言和python语言的区别在哪里
- 构建基本脚本(转)*****好文章*****
- 狂神说Linux学习笔记
- 【excel问题】关于组织策略阻止超链,解决方法
- scikit-learn:回归分析——多元线性回归LinearRegression
- ajax直接调用数据库数据库数据库,AJAX调用mysql数据库简单例子(示例代码)
- 清除FreeIPA SSSD缓存
- 熊猫烧香病毒幕后黑手曝光 网络世界高手对决一个月
- JS解密,在线JS解密解密
- hive--解决使用not in之后返回数据为空的问题
热门文章
- python xyz_python中xyz坐标的欧几里德距离
- python update skeleton 不自动_python编程笔记(1)-数据类型
- 如何用css和HTML结合画熊,结合伪元素实现的纯CSS3高级图形绘制
- gcc编译c文件的简单操作
- html如何制作滑块,网页制作html5实现滑块功能之type=quot;rangequot;属性-建站-建站教程-建站方法-米云建站 - 米云问答...
- 【LeetCode】053. Maximum Subarray
- 带日期的bean转为json(bean-JSON)
- 简单几何(极角排序) POJ 2007 Scrambled Polygon
- 基于Spring框架的Shiro配置
- C#4.0 Collections【集合】