栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

面试题:一次编辑问题

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

面试题:一次编辑问题

Leetcode挑战

2020/5/13

面试题 01.05. 一次编辑

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

示例1:

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

示例2:

输入: 
first = "pales"
second = "pal"
输出: False
  • 解题思路:利用双指针模拟

​ (1)first长度与second长度相差大于1直接放回false

​ (2)长度相差1:用短的字符串匹配长的字符串

​ (3)长度相同,直接匹配

代码:

class Solution {
   public boolean oneEditAway(String first, String second) {
        int m = first.length();
        int n = second.length();
        //两个字符串长度只差大于1直接返回false
        if (!((Math.abs(m - n) == 1) || (Math.abs(m - n) == 0))) return false;
       
       //将String转化为字符数组
        char[] f = first.toCharArray();
        char[] s = second.toCharArray();
        //f记录长字符串
        //m是长字符串的长度
        if (m < n) {
            char[] temp = s;
            s = f;
            f = temp;
            int temp1 = m;
            m = n;
            n = temp1;
        }
        
       //count记录编辑次数
        int count = 0;
        int i = 0;
        int j = 0;
        while (i < m && j < n) {
            //值相等,i,j都指针向后移动
            if (f[i] == s[j]) {
                i++;
                j++;
            } else {//值不相等
                //两个字符串长度不等,长字符串的i指针+1(因为长短字符差只能为1)
                if (m != n) {
                    i++;
                    //字符串长度相等,两个指针都+1,并且记录编辑次数+1
                } else {
                    i++;
                    j++;
                }
                count++;
            }
            if (count > 1) {//编辑次数大于1直接返回false
                return false;
            }
        }
        return true;
    }
}

总结:

  1. 对java的包的使用还不够熟练
  2. 对所有情况的考虑还不完整,导致bug比较多,多用debug。
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/881389.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号