写点什么

【LeetCode】一次编辑 Java 题解

作者:HQ数字卡
  • 2022 年 5 月 13 日
  • 本文字数:1006 字

    阅读完需:约 3 分钟

题目描述

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


示例 1:


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


示例 2:


输入:first = "pales"second = "pal"输出: False


来源:力扣(LeetCode)链接:https://leetcode.cn/problems/one-away-lcci著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。


思路分析

  • 今天的算法题目是字符串处理题目。题目描述清晰,我们需要分情况讨论处理。

  • 题目要求比较两个字符串,是否可以通过 0 次或者 1 次操作修改成为相同。我们首先需要比较两个字符串的长度。长度相同的话,比较两个字符串字符差异的个数,不同的字符的个数小于等于 1 即为 true。当长度不同的时候,只找到不同的字符位置,比较差值。实现代码如下,供参考。

通过代码

class Solution {    public boolean oneEditAway(String first, String second) {        int m = first.length(), n = second.length();        if (n - m == 1) {            return oneInsert(first, second);        } else if (m - n == 1) {            return oneInsert(second, first);        } else if (m == n) {            boolean foundDifference = false;            for (int i = 0; i < m; i++) {                if (first.charAt(i) != second.charAt(i)) {                    if (!foundDifference) {                        foundDifference = true;                    } else {                        return false;                    }                }            }            return true;        } else {            return false;        }    }
public boolean oneInsert(String shorter, String longer) { int length1 = shorter.length(), length2 = longer.length(); int index1 = 0, index2 = 0; while (index1 < length1 && index2 < length2) { if (shorter.charAt(index1) == longer.charAt(index2)) { index1++; } index2++; if (index2 - index1 > 1) { return false; } } return true; }}
复制代码

总结

  • 上述算法的时间复杂度是 O(n),空间复杂度是 O(1)

  • 坚持算法每日一题,加油!

发布于: 刚刚阅读数: 2
用户头像

HQ数字卡

关注

还未添加个人签名 2019.09.29 加入

LeetCode,略懂后端的RD

评论

发布
暂无评论
【LeetCode】一次编辑Java题解_LeetCode_HQ数字卡_InfoQ写作社区