[LeetCode] Edit Distance

编辑距离算法详解
本文详细介绍了如何使用编辑距离算法来计算两个字符串之间的相似度。通过具体实现案例,讲解了算法的基本原理及其递推公式,同时提供了C++代码实现。

 

Given two words word1 and word2, find the minimum number of steps required to convert word1 to word2. (each operation is counted as 1 step.)

You have the following 3 operations permitted on a word:

a) Insert a character
b) Delete a character
c) Replace a character

 

 

 

 

这里我想解释一下 

D[i,j] = D[i-1,j]+del[x(i)];

D[i,j]表示X[1,i]到Y[1,j]的ED,D[i-1,j]表示X[1,i-1]到Y[1,j]的ED,而由X[1,i]到X[1,i-1]的步骤就是del[x(i)]

同理,D[1,j-1]表示X[1,i]到Y[1,j-1]的ED,而由Y[1,i-1]到Y[1,i]的步骤就是ins[y(i)]

小结一下

思路:

X[1,i]-->Y[1,j]有三中方法:

1. 首先X[1,i]-->X[1,i-1] (就是del x(i)) ,然后X[1,i-1]-->Y[1,j]

2 首先X[1,i]-->Y[1,j-1],然后Y[1,j-1]-->Y[1,j](就是ins y(j))

3 就是X[1,i-1]-->Y[1,j-1],然后替换

 

为什么不能X[i+1] --> X[i]; 是删除操作,其实说明X[i] -->X[i+1]是插入操作,他们是相互可以转变的

考虑特殊情况Y为空串,那么X[1,i] -->Y 就需要 i 步骤,而X[1,i+1] -->Y 就需要 i +1步骤

因此,我们考虑问题时X[1,i]-->Y[1,j]只关注 <=i, <=j 的情况,不关注大于i,j的情况

考虑整个字符串 str1 和 str2 ,str1 写作&&&&&&&&&&&&&X,str2 写作%%%%%%%%%%%%%Y

 

&&&&&&&&&&&&&X

%%%%%%%%%Y

就要考虑【&&&&&&&&&&&&&,%%%%%%%%%Y】【&&&&&&&&&&&&&X,%%%%%%%%%】【&&&&&&&&&&&&&,%%%%%%%%%】3中情况即可,所以子问题也考虑着三种情况

 

 

 

 

 

 1 class Solution {
 2     public:
 3         int minDistance(string word1, string word2)
 4         {   
 5             size_t size1 = word1.size();
 6             size_t size2 = word2.size();
 7 
 8             vector <vector<int> >f; 
 9             vector<int> a;
10             a.resize(size2+1, 0); 
11             for(int i = 0; i< size1+1; i++)
12             {   
13                 f.push_back(a);
14             }   
15 
16             for(int i = 0; i<= size1; i++)
17                 f[i][0] = i;
18             for(int i = 0; i<= size2; i++)
19                 f[0][i] = i;
20 
21             for(int i = 0; i< size1; i++)
22             {   
23                 for(int j = 0; j< size2; j++)
24                 {   
25 
26                     int min1 = f[i][j+1];
27                     min1 = min(min1, f[i+1][j]) + 1;
28                     int min2 = f[i][j];
29                     if(word1[i] != word2[j])
30                         min2++;
31                     f[i+1][j+1]= min(min1, min2);
32                 }
33             }
34 
35             return f[size1][ size2];
36         }
37 };

 

转载于:https://www.cnblogs.com/diegodu/p/3824860.html

多角色体系 支持管理员、商家、消费者三种角色,权限分级管控: 管理员:负责平台整体配置、用户审核、数据监控等全局操作。 商家:管理店铺信息、发布商品、处理订单、回复评价等。 消费者:浏览商品、加入购物车、下单支付、评价商品等。 实现用户注册(手机号 / 邮箱验证)、登录(支持密码 / 验证码 / 第三方登录)、个人信息管理(头像、收货地址、密码修改)。 权限精细化控制 商家仅能管理自家店铺及商品,消费者仅能查看和购买商品,管理员拥有全平台数据访问权限。 二、商品管理功能 商品信息维护 商家可发布商品:填写名称、分类(如服饰、电子产品)、子类别(如手机、笔记本)、规格(尺寸、颜色、型号)、价格、库存、详情描述(图文)、物流信息(运费、发货地)等。 支持商品上下架、库存调整、信息编辑,系统自动记录商品状态变更日志。 商品分类与搜索 按多级分类展示商品(如 “数码产品→手机→智能手机”),支持自定义分类体系。 提供智能搜索功能:按关键词(名称、品牌)搜索,支持模糊匹配和搜索联想;结合用户浏览历史对搜索结果排序(优先展示高相关度商品)。 商品推荐 基于用户浏览、收藏、购买记录,推荐相似商品(如 “浏览过该商品的用户还买了…”)。 首页展示热门商品(销量 TOP10)、新品上架、限时折扣等推荐列表。 三、订单与交易管理 购物车与下单 消费者可将商品加入购物车,支持修改数量、选择规格、移除商品,系统自动计算总价(含运费、折扣)。 下单流程:确认收货地址→选择支付方式(在线支付、货到付款)→提交订单→系统生成唯一订单号。 订单处理流程 订单状态跟踪:待支付→已支付→商家发货→物流运输→消费者收货→订单完成,各状态变更实时通知用户。 商家端功能:查看新订单提醒、确认发货(填写物流单号)、处理退款申请(需审核理由)。 消费者端功能:查看订单详情、追踪物流、申请退款 / 退货、确认收货。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值