leetcode原题 一次编辑(判定字符串是否只需要一次(或者零次)编辑)

这篇具有很好参考价值的文章主要介绍了leetcode原题 一次编辑(判定字符串是否只需要一次(或者零次)编辑)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

题目:

字符串有三种编辑操作:插入一个英文字符、删除一个英文字符或者替换一个英文字符。 给定两个字符串,编写一个函数判定它们是否只需要一次(或者零次)编辑。

输入: 
first = "pale"
second = "ple"
输出: True

解题思路:

本题可以分为以下几种情况来处理:

1.两个字符串长度相差=1,那么只需要判断哪个字符串更长,再判断将短字符串插入一个字符串后,是否符合条件

2.两个字符串长度相等,那么只能进行替换,不能插入

3.两个字符串长度相差>1,那么一次编辑是无法使两个字符串相等的,直接返回false即可

源代码如下:文章来源地址https://www.toymoban.com/news/detail-636783.html

class Solution {
public:
    bool oneEditAway(string first, string second) {
        int len1=first.size();
        int len2=second.size();
        //第一个字符串比第二个字符串长度多1个字符
        if(len1-len2==1)
        {
            //给第二个字符串插入一个字符,判断是否跟第一个字符串相等
            return insert(first,second);
        }
        //第二个字符串比第一个字符串长度多1个字符
        else if(len2-len1==1)
        {
            //给第一个字符串插入一个字符,判断是否跟第二个字符串相等
            return insert(second,first);
        }
        //两个字符串长度相等,那么只能通过替换实现,不能进行插入
        else if(len1==len2)
        {
            return replace(first,second);
        }
        //剩下的情况:两个字符串长度相差大于1,不能只通过一次编辑实现
        else
        {
            return false;
        }
    }
    //插入函数
    bool insert(string Long, string Short)
    {
        int i,j=0;
        while(i<Long.size()&&j<Short.size())
        {
            //如果两个字符相等
            if(Long[i]==Short[j])
            {
                //短字符下标继续走
                j++;
            }
            i++;
            //当下标i和j差值大于1时,说明 不止需要插入一个字符
            if(i-j>1) return false;
        }
        return true;
    }
    //替换函数
    bool replace(string first, string second)
    {
        int i=0;
        int flag=0;//标记是否已经覆盖过
        while(i<first.size())
        {
            if(first[i]!=second[i])
            {
                //如果两个字符不相等的同时,flag还大于0,说明前面已经替换过一次了,直接返回false
                if(flag>0)
                {
                    return false;
                }
                //若能替换,则flag++
                flag++;
            }
            i++;
        }
        return true;
    }
};

到了这里,关于leetcode原题 一次编辑(判定字符串是否只需要一次(或者零次)编辑)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 华为OD机试真题 Java 实现【字符串序列判定】【2022Q4 100分】,附详细解题思路

    输入两个字符串a和b,都只包含英文小写字母。 a长度=100,b长度=500,000 。 判定a是否是b的有效子串。 判定规则: a中的每个字符在b中都能找到(可以不连续),且a在b中字符的前后顺序与a中顺序要保持一致。 (例如, a=”qwt” 是 b=”qwerty” 的一个子序列且有效字符是q、w、

    2024年02月08日
    浏览(30)
  • 【每日挠头算法题(2)】压缩字符串|仅执行一次字符串交换能否使两个字符串相等

    点我直达~ 使用双指针法 大致过程如下: 使用双指针,分别读(read),写(write)指针,读指针不断向后走,当read指针走到最后位置处时,或read和read的下一个位置与当前位置不相等时,说明该read指针走到了某一串相同子串的最后位置处。 此时write指针开始记录具体的字符

    2024年02月08日
    浏览(37)
  • MATLAB字符串编辑常用代码

    1.字符串赋值 % 字符串赋值 s=\\\'abcdefg\\\' 2.字符串属性和操作 (1)获取字符串长度   s=\\\'abcdefg\\\';% 字符串赋值 length(a)  % 获取字符串长度  (2)连接字符串 % 连接两个字符串,每个字符串最右边的空格被裁切  s1=\\\'a\\\' s2=\\\'b\\\' s3=strcat(s1,s2) 3.字符串比较 % strcmp    比较两个字符串是否完全相等

    2024年01月24日
    浏览(22)
  • ( 字符串) 205. 同构字符串 ——【Leetcode每日一题】

    难度:简单 给定两个字符串 s 和 t ,判断它们是否是同构的。 如果 s 中的字符可以按某种映射关系替换得到 t ,那么这两个字符串是同构的。 每个出现的字符都应当映射到另一个字符,同时不改变字符的顺序。不同字符不能映射到同一个字符上,相同字符只能映射到同一个

    2024年02月02日
    浏览(34)
  • LeetCode_字符串_简单_415.字符串相加

    给定两个字符串形式的非负整数 num1 和num2,计算它们的和并同样以字符串形式返回。 你不能使用任何內建的用于处理大整数的库(比如 BigInteger), 也不能直接将输入的字符串转换为整数形式。 示例 1: 输入:num1 = “11”, num2 = “123” 输出:“134” 示例 2: 输入:num1 = “

    2024年02月01日
    浏览(27)
  • 力扣2085统计出现过一次的公共字符串

    力扣2085统计出现过一次的公共字符串 给你两个字符串数组  words1  和  words2  ,请你返回在两个字符串数组中  都恰好出现一次  的字符串的数目。 思路一. 可以使用两个map分别存储两个字符串数组中所有字符串出现的数量,最后统计两个map中value均为1的字符串。 思路二

    2024年01月16日
    浏览(29)
  • 2085. 统计出现过一次的公共字符串(Java)

    给你两个字符串数组 words1 和 words2 ,请你返回在两个字符串数组中 都恰好出现一次 的字符串的数目。 words1 = [“leetcode”,“is”,“amazing”,“as”,“is”], words2 = [“amazing”,“leetcode”,“is”] 2 解释: “leetcode” 在两个数组中都恰好出现一次,计入答案。 “amazing” 在两个数

    2024年01月17日
    浏览(30)
  • day-07 统计出现过一次的公共字符串

    思路 用哈希表统计words1和words2中各个字符串的出现次数,次数皆为1的字符串符合题意 解题方法 //用于存储words1中各个字符串的出现次数 HashMapString,Integer hashMap1=new HashMap(); //用于存储words2中各个字符串的出现次数 HashMapString,Integer hashMap2=new HashMap(); //如果words1中某个字符串出

    2024年01月16日
    浏览(28)
  • (字符串 ) 459. 重复的子字符串——【Leetcode每日一题】

    难度:简单 给定一个非空的字符串 s ,检查是否可以通过由它的一个子串重复多次构成。 示例 1: 输入: s = “abab” 输出: true 解释: 可由子串 “ab” 重复两次构成。 示例 2: 输入: s = “aba” 输出: false 示例 3: 输入: s = “abcabcabcabc” 输出: true 解释: 可由子串 “abc” 重复四次构

    2024年02月07日
    浏览(33)
  • LeetCode 2788.按分隔符拆分字符串:模拟(字符串处理)

    力扣题目链接:https://leetcode.cn/problems/split-strings-by-separator/ 给你一个字符串数组 words 和一个字符 separator ,请你按 separator 拆分 words 中的每个字符串。 返回一个由拆分后的新字符串组成的字符串数组, 不包括空字符串 。 注意 separator 用于决定拆分发生的位置,但它不包含在

    2024年01月21日
    浏览(41)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包