161相隔为 1 的编辑距离

tech2022-09-15  104

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

示例 1: 输入: s = “ab”, t = “acb” 输出: true 解释: 可以将 ‘c’ 插入字符串 s 来得到 t。

示例 2: 输入: s = “cab”, t = “ad” 输出: false 解释: 无法通过 1 步操作使 s 变为 t。

示例 3: 输入: s = “1203”, t = “1213” 输出: true 解释: 可以将字符串 s 中的 ‘0’ 替换为 ‘1’ 来得到 t。

方法1: 主要思路: (1)对于长度差异大于1的两个字符串,直接返回false; (2)单独判断长度相等和长度差异为1的两种情形;

class Solution { public: bool isOneEditDistance(string s, string t) { //长度差异大于1的情形直接返回false if((s.size()>t.size()&&s.size()-t.size()>1)||(s.size()<t.size()&&s.size()-t.size()<-1)){ return false; } int count=0; //处理长度相同的情形 if(s.size()==t.size()){ int i=0; //统计两个字符串中的差异 while(i<s.size()){ if(s[i]!=t[i]) ++count; ++i; } //若差异不是1,则直接返回false if(count!=1){ return false; } } else {//处理长度差异为1的情形 int i=0; int j=0; while(i<s.size()&&j<t.size()){ //统计字符串的字符差异 if(s[i++]!=t[j++]){ ++count; if(s.size()>t.size()){ --j; } else{ --i; } } } //若差异大于1,则返回false if(count>1){ return false; } } return true;//否则返回true } };
最新回复(0)