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

这篇文章主要介绍了C++实现LeetCode(161.一个编辑距离),本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下

C++实现LeetCode(161.一个编辑距离),久久派带你了解更多相关信息。

[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://www.zzm8.com/d/file/p/20210730180046137459/20210730180046137460

https://www.zzm8.com/d/file/p/20210730180047137461/20210730180047137462

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

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,请发送邮件至 55@qq.com 举报,一经查实,本站将立刻删除。转转请注明出处:https://www.szhjjp.com/n/8661.html

(0)
上一篇 2021-07-30 23:24:44
下一篇 2021-07-30 23:24:46

相关推荐

  • 西部数据云盘设置(个人云存储设备使用体验)

    最近两年,手机画质越来越高,各种软件迭代升级体积也越来越大,我们日常数据存储的需求也越来越大,手机通常是128G,很快就满了;电脑情况好一点一般有1T~3T的空间,但是也很快就捉襟见肘。尤其是现在自媒体创作者很多,和其他小伙伴需要用到素材时还需要拷贝

    2021-10-07
    0
  • 古诗登楼的全文和译文(登楼杜甫翻译和赏析)

    登楼〔唐代·杜甫〕花近高楼伤客心,万方多难此登临。锦江春色来天地,玉垒浮云变古今。北极朝廷终不改,西山寇盗莫相侵。可怜后主还祠庙,日暮聊为梁甫吟。“锦江春色来天地,玉垒浮云变古今”,诗人从登楼看见的景色开始写起,描绘了一幅

    2021-11-03 用户投稿
    0
  • linux系统正常分区(linux如何分区)

    分区分区前我们要找到新的磁盘名称。使用lsblk#lsblkNAMEMAJ:MINRMSIZEROTYPEMOUNTPOINTvda253:0040G0disk└─vda12…

    2022-03-03
    0
  • 爱情伤感文案短句扎心(伤感爱情的文案短句)

    每天分享人生实用感悟,让你越活越明白,越看越幸福,点击右上角关注“木子尚mzs”。一、我从未拥有过你一秒钟,心里却失去过你千万次。二、所有微笑的背后,是无声的泪水,所有表面的坚强,都是死撑硬扛,成人的世界里,笑是哭的替代,强是弱的伪装。三、沉默是

    2021-10-14 随笔
    0
  • 唐山大地震发生在哪一年(唐山大地震有多严重)

    唐山大地震发生在哪一年?唐山大地震有多严重,久久派带你了解相关信息。1976年7月28日3时42分,这是令所有中国人痛心的一天,河北唐山发生7.8级强震,持续23秒的时间。而就是这23秒,造成了242769人死亡,16.4万人重伤,轻伤者544000人,许许多多的人在睡梦中再也没有醒来。图为地震过后的唐山,一座城市变成了废墟,可想而知有多惨烈。地震后开裂的地面。地震后的唐山,惨状世界

    2021-12-27 用户投稿
    0
  • 国外设计,国内设计和国外设计的区别

    国外设计(国内设计和国外设计的区别)随着中国建筑装饰行业在国内市场的迅速发展和扩张,国内市场对于室内设计师的需求量在急速增大。但在当今国民审美标准持续提升的大环境下,许多质量优良的设计作品有相当一部分的数量来自于国外设计师,或者是曾有国外留学背景的高端海归人才。京协作胡同胶囊酒店by青山周平创立的设计师事务所B.L.U.E可活动的房子——上海DOEby青山周平创立的设计师事务所B.L.U.

    2021-08-18 用户投稿
    0

发表回复

登录后才能评论