当前位置: 首页 > news >正文

UVa 526 String Distance and Transform Process

题目描述

题目要求计算两个字符串之间的编辑距离(Levenshtein distance\texttt{Levenshtein distance}Levenshtein distance),并输出具体的编辑操作序列。允许的操作有:

  • Delete pos\texttt{Delete pos}Delete pos:删除位置pospospos的字符。
  • Insert pos,value\texttt{Insert pos,value}Insert pos,value:在位置pospospos插入字符valuevaluevalue
  • Replace pos,value\texttt{Replace pos,value}Replace pos,value:将位置pospospos的字符替换为valuevaluevalue

输出格式:第一行为编辑距离,接下来每行一个操作(按执行顺序编号)。两个连续测试用例的输出之间由一个空行分隔。

输入格式

输入包含多个字符串对,每对由两行组成,每行一个字符串(长度不超过808080)。输入以文件结束符(EOF\texttt{EOF}EOF)终止。

输出格式

对于每个字符串对,输出编辑距离,然后输出操作序列。不同测试用例的输出之间由一个空行分隔。

样例

输入

abcac bcd aaa aabaaaa

输出

3 1 Delete 1 2 Replace 3,d 3 Delete 4 4 1 Insert 1,a 2 Insert 2,a 3 Insert 3,b 4 Insert 7,a

题目分析

本题的核心是计算最小编辑距离并回溯输出操作序列。

动态规划

定义dp[i][j]\textit{dp}[i][j]dp[i][j]为将SSS的前iii个字符转换为TTT的前jjj个字符所需的最小操作数。转移方程:

  • 删除:dp[i][j]=dp[i−1][j]+1\textit{dp}[i][j] = \textit{dp}[i-1][j] + 1dp[i][j]=dp[i1][j]+1
  • 插入:dp[i][j]=dp[i][j−1]+1\textit{dp}[i][j] = \textit{dp}[i][j-1] + 1dp[i][j]=dp[i][j1]+1
  • 替换:dp[i][j]=dp[i−1][j−1]+1\textit{dp}[i][j] = \textit{dp}[i-1][j-1] + 1dp[i][j]=dp[i1][j1]+1(若S[i]≠T[j]S[i] \ne T[j]S[i]=T[j]
  • 匹配:dp[i][j]=dp[i−1][j−1]\textit{dp}[i][j] = \textit{dp}[i-1][j-1]dp[i][j]=dp[i1][j1](若S[i]=T[j]S[i] = T[j]S[i]=T[j]

同时记录每个状态的操作类型,以便回溯。

操作序列回溯

(M,N)(M, N)(M,N)回溯到(0,0)(0, 0)(0,0),根据记录的操作类型逆序输出。注意:

  • 删除操作会影响后续字符的位置,因此输出时需要动态调整位置索引。
  • 插入操作同理。
  • 替换操作不改变位置索引。

复杂度分析

时间复杂度O(M×N)O(M \times N)O(M×N),空间复杂度O(M×N)O(M \times N)O(M×N)M,N≤80M, N \le 80M,N80,可接受。

代码实现

// String Distance and Transform Process// UVa ID: 526// Verdict: Accepted// Submission Date: 2016-02-13// UVa Run Time: 0.009s//// 版权所有(C)2016,邱秋。metaphysis # yeah dot net#include<bits/stdc++.h>usingnamespacestd;constintNONE=-1,DELETE=0,INSERT=1,CHANGE=2,MATCH=3;// 定义动态规划表格单元。structcell{intcost,operation;};cell dp[100][100];string S,T,operationCode[3]={" Delete "," Insert "," Replace "};intM,N,deletions,insertions,indexer;// 显示操作步骤,注意删除操作其序号会因为已有的删除和插入操作而发生变化。voiddisplayPath(inti,intj){if(dp[i][j].operation>=DELETE&&dp[i][j].operation<=CHANGE){cout<<indexer++;cout<<operationCode[dp[i][j].operation];if(dp[i][j].operation==CHANGE){cout<<j<<","<<T[j]<<"\n";}elseif(dp[i][j].operation==DELETE){cout<<(i+insertions-deletions)<<"\n";deletions++;}elseif(dp[i][j].operation==INSERT){cout<<j<<","<<T[j]<<"\n";insertions++;}}}// 利用递归构建操作步骤。voidfindPath(inti,intj){if(dp[i][j].operation!=NONE){if(dp[i][j].operation==DELETE)findPath(i-1,j);elseif(dp[i][j].operation==INSERT)findPath(i,j-1);elsefindPath(i-1,j-1);}displayPath(i,j);}voidminimumEditDistance(){// 为每个字符串起始位置增加一个空格,将字符串序号和表格序号对齐,方便处理。// 因此其长度需要相应减去 1。S=' '+S;T=' '+T;M=S.length()-1;N=T.length()-1;dp[0][0]=(cell){0,NONE};for(inti=1;i<=M;i++)dp[i][0]=(cell){i,DELETE};for(intj=1;j<=N;j++)dp[0][j]=(cell){j,INSERT};// 自底向上动态规划求解。for(inti=1;i<=M;i++)for(intj=1;j<=N;j++){dp[i][j]=(cell){dp[i-1][j].cost+1,DELETE};if(dp[i][j].cost>(dp[i][j-1].cost+1))dp[i][j]=(cell){dp[i][j-1].cost+1,INSERT};if(S[i]==T[j]){if(dp[i][j].cost>dp[i-1][j-1].cost)dp[i][j]=(cell){dp[i-1][j-1].cost,MATCH};}else{if(dp[i][j].cost>(dp[i-1][j-1].cost+1))dp[i][j]=(cell){dp[i-1][j-1].cost+1,CHANGE};}}// 反向构建操作步骤。deletions=0;insertions=0;indexer=1;cout<<dp[M][N].cost<<"\n";findPath(M,N);}intmain(intargc,char*argv[]){cin.tie(0);cout.sync_with_stdio(false);boolprintBlankLine=false;while(getline(cin,S)&&getline(cin,T)){if(printBlankLine==false)printBlankLine=true;elsecout<<"\n";minimumEditDistance();}return0;}
http://www.jsqmd.com/news/1040307/

相关文章:

  • 深入解析MMDS11总线状态分析:嵌入式调试核心机制与实战命令
  • SoapUI:API测试瑞士军刀,从功能到性能的全栈实战指南
  • 2026年知名的膜结构工程品牌制造商用户力荐 - myqiye
  • 免费跨平台视频聚合播放器:zyfun如何用Electron+Vue3打造终极观影体验
  • 预测性线索评分:B2B销售精准决策的实战引擎
  • MCP1525与MCP1541电压基准芯片:选型、电路设计与高频问题排查指南
  • 便携式Kali与AI自动化渗透测试:构建智能安全测试平台
  • M2.7自我深度迭代:大模型在线认知闭环技术解析
  • AI可信四支柱:透明性、可追责性、隐私保护与无偏见性工程实践
  • Agent之Skill:SkillSpector的简介、安装和使用方法、案例应用之详细攻略
  • 嵌入式开发中链接器参数文件(PRM)的内存配置与优化实践
  • 从月销3万+看中国品牌出海:如何把“不起眼”的工具变成海外刚需?
  • Rnote:开源矢量手写笔记应用的终极指南
  • 物流调度实时监控HTML大屏模板(含登录页+ECharts动态图表)
  • 口碑好的烘焙培训中心综合实力推荐 - myqiye
  • 豆包AI视频总结:重构视频信息处理工作流
  • 2026年南昌市PMP培训机构哪家好?官方授权R.E.P.报考指南 - 众智商学院课程中心
  • Qwen3.6-Plus:真实世界智能体的结构化升级
  • 聚焦AI时代反网络钓鱼,筑牢跨境通信安全防线——“一带一路”国家网络安全人才技能培训班成功举办
  • TC1027四路比较器在嵌入式低功耗系统中的电源监控实战
  • JMeter压力测试全链路实战:从环境搭建到瓶颈定位
  • 2026年6月装配式钢板仓供应商有哪些,伸缩输送机/装配式钢板仓/车载输送机,装配式钢板仓供应商选哪家 - 品牌推荐师
  • 用强化学习训练AI代理:从奖励建模到策略部署的工程实践
  • 2026年正规源头橡木浴室柜厂家实力参考:用料扎实值得信赖 - myqiye
  • 专业的openclaw哪家更好
  • 漏洞修复实战指南:热修复与根治性修复的核心策略与工程实践
  • 混元3架构解析:工业级MoE大模型的模块化装配逻辑
  • Qwen3.6Flash解析:A3B不是量化,而是动态计算调度范式
  • 中兴光猫终极解锁指南:zteOnu工具深度解析与实战应用
  • 谷歌Gemini3Pro提示词手册:从技巧到工程化的方法论