iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >C++实现LeetCode(161.一个编辑距离)
  • 328
分享到

C++实现LeetCode(161.一个编辑距离)

2024-04-02 19:04:59 328人浏览 薄情痞子
摘要

[LeetCode] 161. One Edit Distance 一个编辑距离 Given two strings s and t, determin

[LeetCode] 161. One Edit Distance 一个编辑距离

Given two strings s and t, determine if they are both one edit distance apart.

Note: 

There are 3 possiblities to satisify one edit distance apart:

  1. Insert a character into s to get t
  2. Delete a character from s to get t
  3. Replace a character of s to get t

Example 1:

Input: s = "ab", t = "acb" Output: true
Explanation: We can insert 'c' into s to get t.

Example 2:

Input: s = "cab", t = "ad"

Output: false

Explanation: We cannot get t from s by only one step.

Example 3:

Input: s = "1203", t = "1213"
Output: true
Explanation: We can replace '0' with '1' to get t.

这道题是之前那道 Edit Distance 的拓展,然而这道题并没有那道题难,这道题只让我们判断两个字符串的编辑距离是否为1,那么只需分下列三种情况来考虑就行了:

1. 两个字符串的长度之差大于1,直接返回False。

2. 两个字符串的长度之差等于1,长的那个字符串去掉一个字符,剩下的应该和短的字符串相同。

3. 两个字符串的长度之差等于0,两个字符串对应位置的字符只能有一处不同。

分析清楚了所有的情况,代码就很好写了,参见如下:

解法一:


class Solution {
public:
    bool isOneEditDistance(string s, string t) {
        if (s.size() < t.size()) swap(s, t);
        int m = s.size(), n = t.size(), diff = m - n;
        if (diff >= 2) return false;
        else if (diff == 1) {
            for (int i = 0; i < n; ++i) {
                if (s[i] != t[i]) {
                    return s.substr(i + 1) == t.substr(i);
                }
            }
            return true;
        } else {
            int cnt = 0;
            for (int i = 0; i < m; ++i) {
                if (s[i] != t[i]) ++cnt;
            }
            return cnt == 1;
        }
    }
};

我们实际上可以让代码写的更加简洁,只需要对比两个字符串对应位置上的字符,如果遇到不同的时候,这时看两个字符串的长度关系,如果相等,则比较当前位置后的字串是否相同,如果s的长度大,那么比较s的下一个位置开始的子串,和t的当前位置开始的子串是否相同,反之如果t的长度大,则比较t的下一个位置开始的子串,和s的当前位置开始的子串是否相同。如果循环结束,都没有找到不同的字符,那么此时看两个字符串的长度是否相差1,参见代码如下:

解法二:


class Solution {
public:
    bool isOneEditDistance(string s, string t) {
        for (int i = 0; i < min(s.size(), t.size()); ++i) {
            if (s[i] != t[i]) {
                if (s.size() == t.size()) return s.substr(i + 1) == t.substr(i + 1);
                if (s.size() < t.size()) return s.substr(i) == t.substr(i + 1);
                else return s.substr(i + 1) == t.substr(i);
            }
        }
        return abs((int)s.size() - (int)t.size()) == 1;
    }
};

GitHub 同步地址:

https://github.com/grandyang/leetcode/issues/161

类似题目:

Edit Distance

参考资料:

Https://leetcode.com/problems/one-edit-distance/

https://leetcode.com/problems/one-edit-distance/discuss/50108/C%2B%2B-DP

https://leetcode.com/problems/one-edit-distance/discuss/50098/My-CLEAR-JAVA-solution-with-explanation

到此这篇关于c++实现LeetCode(161.一个编辑距离)的文章就介绍到这了,更多相关C++实现一个编辑距离内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: C++实现LeetCode(161.一个编辑距离)

本文链接: https://www.lsjlt.com/news/131539.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • C++实现LeetCode(161.一个编辑距离)
    [LeetCode] 161. One Edit Distance 一个编辑距离 Given two strings s and t, determin...
    99+
    2024-04-02
  • C++实现LeetCode(72.编辑距离)
    [LeetCode] 72. Edit Distance 编辑距离 Given two words word1 and word2, find the ...
    99+
    2024-04-02
  • 怎么用C++实现编辑距离
    这篇文章主要讲解了“怎么用C++实现编辑距离”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么用C++实现编辑距离”吧!Edit Distance 编辑距离Given two words&n...
    99+
    2023-06-20
  • C++怎么编辑距离
    这篇文章主要介绍“C++怎么编辑距离”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“C++怎么编辑距离”文章能帮助大家解决问题。编辑距离Example 1:Input: word1 = "h...
    99+
    2023-06-19
  • C++编辑距离(动态规划)
    题目描述: 给你两个单词 word1 和 word2,请你计算出将 word1 转换成 word2 所使用的最少操作数 。 我们可以对一个单词进行如下三种操作: 插入一个字符删除一个...
    99+
    2024-04-02
  • 算法leetcode|72. 编辑距离(rust重拳出击)
    文章目录 72. 编辑距离:样例 1:样例 2:提示: 分析:题解:rust:二维数组(易懂)滚动数组(更加优化的内存空间) go:c++:python:java: 72...
    99+
    2023-09-07
    rust golang 数据结构 算法 后端 leetcode
  • C++怎么判断编辑距离是否为1
    这篇文章主要讲解了“C++怎么判断编辑距离是否为1”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“C++怎么判断编辑距离是否为1”吧!编辑距离这道题是之前那道 Edit Distan...
    99+
    2023-06-20
  • C++实现LeetCode(164.求最大间距)
    [LeetCode] 164. Maximum Gap 求最大间距 Given an unsorted array, find the maximum difference betw...
    99+
    2024-04-02
  • C++中怎么实现一个LeetCode
    这篇文章给大家介绍C++中怎么实现一个LeetCode,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。[LeetCode] 128.Longest Consecutive Sequence 求最长连续序列Given an...
    99+
    2023-06-20
  • PHP如何计算两个字符串之间的编辑距离
    这篇文章将为大家详细讲解有关PHP如何计算两个字符串之间的编辑距离,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。PHP 计算字符串编辑距离 引言 字符串编辑距离是衡量两个字符串相似程度的指标。它计算将一个...
    99+
    2024-04-02
  • C++实现LeetCode(31.下一个排列)
    [LeetCode] 31. Next Permutation 下一个排列 Implement next permutation, which rearranges num...
    99+
    2024-04-02
  • 怎么在HTML5中使用Geolocation实现一个距离追踪器
    今天就跟大家聊聊有关怎么在HTML5中使用Geolocation实现一个距离追踪器,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。页面结构如下所示:<div id=&q...
    99+
    2023-06-09
  • C++实现LeetCode(74.搜索一个二维矩阵)
    [LeetCode] 74. Search a 2D Matrix 搜索一个二维矩阵 Write an efficient algorithm that searches for a...
    99+
    2024-04-02
  • Qt实现一个简单的word文档编辑器
    目录1.先看效果图2.需要用到的类2.1字体选择下拉框:QFontComboBox。2.2颜色对话框:QColorDialog2.3QTextCharFormat3.源码1.先看效果...
    99+
    2024-04-02
  • C++实现LeetCode(25.每k个一组翻转链表)
    [LeetCode] 25. Reverse Nodes in k-Group 每k个一组翻转链表 Given a linked list, reverse the nodes of...
    99+
    2024-04-02
  • Qt实现文本编辑器(一)
    目录功能实现动作(QAction)实现菜单(Menus)实现工具栏(ToolBars)实现展示区域小结(一)在Qt中QMainWindow是一个为用户提供主窗口程序的类,包含了:菜单...
    99+
    2024-04-02
  • C++实现LeetCode之求最大间距的示例分析
    这篇文章主要介绍C++实现LeetCode之求最大间距的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完![LeetCode] 164. Maximum Gap 求最大间距Given an unsorted ar...
    99+
    2023-06-20
  • C++实现LeetCode(66.加一运算)
    [LeetCode] 66. Plus One 加一运算 Given a non-empty array of decimal digits repre...
    99+
    2024-04-02
  • 怎么在html中实现一个markdown编辑器效果
    今天就跟大家聊聊有关怎么在html中实现一个markdown编辑器效果,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。一:下载Editor.md进入官网直接进行下载使用npm进行下载n...
    99+
    2023-06-09
  • 请教一个gridview实现某列可编辑的功能
    要实现GridView某列可编辑的功能,可以使用TemplateField和EditItemTemplate来定义可编辑的列。下面是...
    99+
    2023-08-08
    gridview
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作