力扣每日一题:一次编辑

本文探讨了力扣中的一道编程题,涉及字符串编辑距离问题。通过分析字符串的删除、插入和替换操作,判断两个字符串是否只需一次编辑即可转换成对方。文章详细解释了不同情况下的处理逻辑,并提供了相应的代码实现,包括删除、添加和替换三种情况的边界条件检查。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

众所周知,力扣的题目都很骚!!!!

今天的题目格外有趣,你要是不注意看,又是两三小时的无尽深渊(没错,又是我陷入进去了!)

来分析题目:

1.它说只进行一次:删除、插入、或者替换

2.给了俩字符串

3.首先我们就想,如果这俩字符串相等是什么原因?很显然,就是替换

4.a>b呢?对!没错!就是删除

5.a<b就是插入对吧!

6.题说只用了一次编辑就是true两次及其以上就是fals,所以我们就长字符减去短字符如果>=2,就是fals,就不用执行了。话不多说,上代码!!

class Solution {
    public boolean oneEditAway(String str1, String str2) {
     boolean f = false;
		int alen = str1.length();
		int blen = str2.length();
		if (alen == 0 || blen == 0) {
			return true;
		}
		if (alen > blen) {
            if (alen - blen >= 2) {
					return false;
				}
			char c1 = str1.charAt(0);
			char c2 = str2.charAt(0);// 删除
			if (c1 == c2) {

				String st = str1.substring(0, blen);
				System.out.println(st);
				if (!st.equals(str2)) {
					return false;
				}
				
			} else {
                if (alen - blen >= 2) {
					return false;
				}
				String st = str1.substring(1);
				if (!st.equals(str2)) {
					return false;
				}
				
			}
			return true;
		} else if (alen < blen) {// 添加
			int c = 0;
			int d = 0;
			int cont = 0;
			while (d != alen) {//别忘了,它可以在中间给你插入一个字符,也是true哦
				if (!(str1.charAt(d) == str2.charAt(c))) {
					cont++;
					c++;
				} else {
					c++;
					d++;
				}
				if (cont >= 2) {
					return false;
				}
			}
			if (blen - alen >= 2) {
				return false;
			}
			return true;

		} else {// 替换
			if (str1.equals(str2)) {
				return true;
			}
			int cont = 0;
			for (int i = 0; i < alen; i++) {
				if (!(str1.charAt(i) == str2.charAt(i))) {
					cont++;
					if (cont >= 2) {
						return false;
					}
				}
			}
			return true;
		}
		


    }
}

上面要注意的是:

在删除的时候:可以在删除前面一个,也可以删除后面一个

在添加的时候:可以在前、中、后各添加,要注意哦!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值