前端基础笔记——字符串最小变换次数(使用递归)

本文探讨了两个字符串间的最小转换步骤,包括插入、删除和更改字符,实现从一个字符串到另一个字符串的转变。通过递归算法,考虑了不同长度下字符串转换的最优路径。

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

给定两个字符串,已知可以使用三种方式进行变换
1. 插入一个字符
2. 删除一个字符
3. 更改一个字符
请设计一个算法,找到两个字符串之间的经历几次最小变换,可以字符串1转换成字符串2

// 假定变换规则是 1. 串1长度大于串2的时候,删除字符
// 2. 串1长度小于串2的时候,添加字符
// 3. 串1长度等于串2的时候,替换字符
// 如果仅仅是这种思路,那么只能通过50%。。。
var change=readline().split('');
var old=readline().split('');
function dp(old,mynow){
    // 四种情况
    let old_len=old.length;
    let now_len=mynow.length;
    // 跳过,看下一个数
    // 插入,删除,更改
    let ins_spl=mynow.slice(0,now_len-1);
    let del_spl=old.slice(0,old_len-1)
    let ins_old=old.slice(0,old_len)
    let del_now=mynow.slice(0,now_len)
    // 结束条件: 1. 如果数字一致,那么后面两个数不用改变
    if(now_len==1&&old_len==1&&old[0]==mynow[0]){
        return 0
    }else if(now_len==1||old_len==1){
        // 2. 否则改变一次才可以
        return 1
    }
    if(mynow[now_len-1]==old[old_len-1]){
        return dp(del_spl,ins_spl)
    }else{
        return 1+Math.min(dp(ins_old,ins_spl),dp(del_spl,del_now),dp(del_spl,ins_spl))
    } 
}
console.log(dp(old,change))

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值