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[i−1][j]1插入dp[i][j]dp[i][j−1]1\textit{dp}[i][j] \textit{dp}[i][j-1] 1dp[i][j]dp[i][j−1]1替换dp[i][j]dp[i−1][j−1]1\textit{dp}[i][j] \textit{dp}[i-1][j-1] 1dp[i][j]dp[i−1][j−1]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[i−1][j−1]若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,N≤80可接受。代码实现// String Distance and Transform Process// UVa ID: 526// Verdict: Accepted// Submission Date: 2016-02-13// UVa Run Time: 0.009s//// 版权所有C2016邱秋。metaphysis # yeah dot net#includebits/stdc.husingnamespacestd;constintNONE-1,DELETE0,INSERT1,CHANGE2,MATCH3;// 定义动态规划表格单元。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].operationDELETEdp[i][j].operationCHANGE){coutindexer;coutoperationCode[dp[i][j].operation];if(dp[i][j].operationCHANGE){coutj,T[j]\n;}elseif(dp[i][j].operationDELETE){cout(iinsertions-deletions)\n;deletions;}elseif(dp[i][j].operationINSERT){coutj,T[j]\n;insertions;}}}// 利用递归构建操作步骤。voidfindPath(inti,intj){if(dp[i][j].operation!NONE){if(dp[i][j].operationDELETE)findPath(i-1,j);elseif(dp[i][j].operationINSERT)findPath(i,j-1);elsefindPath(i-1,j-1);}displayPath(i,j);}voidminimumEditDistance(){// 为每个字符串起始位置增加一个空格将字符串序号和表格序号对齐方便处理。// 因此其长度需要相应减去 1。S S;T T;MS.length()-1;NT.length()-1;dp[0][0](cell){0,NONE};for(inti1;iM;i)dp[i][0](cell){i,DELETE};for(intj1;jN;j)dp[0][j](cell){j,INSERT};// 自底向上动态规划求解。for(inti1;iM;i)for(intj1;jN;j){dp[i][j](cell){dp[i-1][j].cost1,DELETE};if(dp[i][j].cost(dp[i][j-1].cost1))dp[i][j](cell){dp[i][j-1].cost1,INSERT};if(S[i]T[j]){if(dp[i][j].costdp[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].cost1))dp[i][j](cell){dp[i-1][j-1].cost1,CHANGE};}}// 反向构建操作步骤。deletions0;insertions0;indexer1;coutdp[M][N].cost\n;findPath(M,N);}intmain(intargc,char*argv[]){cin.tie(0);cout.sync_with_stdio(false);boolprintBlankLinefalse;while(getline(cin,S)getline(cin,T)){if(printBlankLinefalse)printBlankLinetrue;elsecout\n;minimumEditDistance();}return0;}

相关新闻

Selenium元素定位终极指南:8种方法、实战技巧与避坑策略

Selenium元素定位终极指南:8种方法、实战技巧与避坑策略

1. 项目概述:为什么元素定位是自动化测试的“命门”?干了这么多年自动化测试,我敢说,超过80%的自动化脚本失败,问题都出在元素定位上。你兴冲冲地写好了脚本,一运行,浏览器是打开了,…

2026/6/19 5:10:23阅读更多 →
Kimi-K2.5原生多模态架构:ViT-MLP-LLM协同进化与Agent并行推理

Kimi-K2.5原生多模态架构:ViT-MLP-LLM协同进化与Agent并行推理

1. 项目概述:当多模态理解不再“看图说话”,Agent协作也不再是单线程排队我做多模态大模型(MLLM)落地项目快六年了,从最早的CLIPLLM拼接方案,到后来Qwen-VL、InternVL系列的端到端训练,再到最近…

2026/6/19 5:10:23阅读更多 →
聚焦AI时代反网络钓鱼,筑牢跨境通信安全防线——“一带一路”国家网络安全人才技能培训班成功举办

聚焦AI时代反网络钓鱼,筑牢跨境通信安全防线——“一带一路”国家网络安全人才技能培训班成功举办

6月6日,“一带一路”国家网络安全人才技能培训班在广州大学城智汇谷成功举办。本次培训由公共互联网反网络钓鱼工作组成员单位广东盈世计算机科技有限公司(Coremail)、暨南大学共同主办,来自30余个“一带一路”国家的60名外籍学员…

2026/6/19 5:10:23阅读更多 →
Wox终极指南:如何用跨平台启动器提升10倍工作效率

Wox终极指南:如何用跨平台启动器提升10倍工作效率

Wox终极指南:如何用跨平台启动器提升10倍工作效率 【免费下载链接】Wox A cross-platform launcher that simply works 项目地址: https://gitcode.com/gh_mirrors/wo/Wox 你是不是经常在电脑前花费大量时间寻找文件、启动应用、复制粘贴内容?每天…

2026/6/19 6:40:36阅读更多 →
mobisys2018_nexmon_software_defined_radio硬件兼容性:支持哪些Broadcom芯片和设备

mobisys2018_nexmon_software_defined_radio硬件兼容性:支持哪些Broadcom芯片和设备

mobisys2018_nexmon_software_defined_radio硬件兼容性:支持哪些Broadcom芯片和设备 【免费下载链接】mobisys2018_nexmon_software_defined_radio Proof of concept project for operating Broadcom Wi-Fi chips as arbitrary signal transmitters similar to soft…

2026/6/19 6:40:36阅读更多 →
2025年终极指南:如何快速上手MATH数据集进行AI数学推理评估

2025年终极指南:如何快速上手MATH数据集进行AI数学推理评估

2025年终极指南:如何快速上手MATH数据集进行AI数学推理评估 【免费下载链接】math The MATH Dataset (NeurIPS 2021) 项目地址: https://gitcode.com/gh_mirrors/math/math 想要测试AI模型的数学解题能力吗?MATH数据集正是你需要的完美工具&#…

2026/6/19 6:40:36阅读更多 →
PiliPlus完全指南:打造你的专属B站开源客户端

PiliPlus完全指南:打造你的专属B站开源客户端

PiliPlus完全指南:打造你的专属B站开源客户端 【免费下载链接】PiliPlus PiliPlus 项目地址: https://gitcode.com/gh_mirrors/pi/PiliPlus 厌倦了官方B站的广告干扰和功能限制?想要一个更纯净、更强大的B站观看体验?PiliPlus就是你一…

2026/6/19 6:40:36阅读更多 →
OpenFoodFacts-androidapp与API集成:如何高效访问Open Food Facts数据接口

OpenFoodFacts-androidapp与API集成:如何高效访问Open Food Facts数据接口

OpenFoodFacts-androidapp与API集成:如何高效访问Open Food Facts数据接口 【免费下载链接】openfoodfacts-androidapp (Legacy) Native version of Open Food Facts on Android - Coders & Decoders welcome 🤳🥫 项目地址: https://…

2026/6/19 6:40:36阅读更多 →
oam-tools msproftx数据采集

oam-tools msproftx数据采集

采集msproftx数据 【免费下载链接】oam-tools 本项目为开发者提供故障定位工具,包含故障信息收集,软硬件信息展示,AI core error报错分析等能力,提升故障问题定位效率,文档可在昇腾社区搜索“故障处理简介”&#xff0…

2026/6/19 6:35:35阅读更多 →
Photobucket付费墙背后:5美元买童年回忆却落得一场空!

Photobucket付费墙背后:5美元买童年回忆却落得一场空!

1. 付费墙初现如今身处万亿市值公司林立的时代,我们也不能轻易放弃5美元。就像Photobucket,它曾相当于过去的Imgur,我们小时候常把图片上传到这个网站,然后在各种论坛上分享链接,它简单好用,尽职尽责。但最…

2026/6/19 0:04:37阅读更多 →
如何在5分钟内掌握Mermaid Live Editor:实时图表编辑终极指南

如何在5分钟内掌握Mermaid Live Editor:实时图表编辑终极指南

如何在5分钟内掌握Mermaid Live Editor:实时图表编辑终极指南 【免费下载链接】mermaid-live-editor Edit, preview and share mermaid charts/diagrams. New implementation of the live editor. 项目地址: https://gitcode.com/GitHub_Trending/me/mermaid-live…

2026/6/19 0:04:37阅读更多 →
yuzu模拟器内存修改技术深度解析:金手指功能实现原理与实践指南

yuzu模拟器内存修改技术深度解析:金手指功能实现原理与实践指南

yuzu模拟器内存修改技术深度解析:金手指功能实现原理与实践指南 【免费下载链接】yuzu 项目地址: https://gitcode.com/GitHub_Trending/yuz/yuzu yuzu作为目前最流行的开源Nintendo Switch模拟器,不仅提供了完整的游戏运行环境,还内…

2026/6/19 0:04:37阅读更多 →