尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

UVa 526 String Distance and Transform Process

UVa 526 String Distance and Transform Process
📅 发布时间:2026/6/19 5:26:36

题目描述

题目要求计算两个字符串之间的编辑距离(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//// 版权所有(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;}

相关新闻

  • 便携式Kali与AI自动化渗透测试:构建智能安全测试平台
  • M2.7自我深度迭代:大模型在线认知闭环技术解析
  • Agent之Skill:SkillSpector的简介、安装和使用方法、案例应用之详细攻略

最新新闻

  • compose-for-agents核心组件解析:从Docker容器到MCP工具集的完整架构
  • 深入解析Playwright Java中Browser类:从核心原理到实战应用
  • CWM安全与部署指南:非商业研究使用的风险控制与最佳实践
  • MGT5100时序与电气规格解析:硬件稳定性的设计基石
  • 抖音批量下载终极指南:3分钟搞定1000个视频的高效方案
  • 5分钟构建专业摄影工作流:semi-utils批量水印技术深度解析 [特殊字符]

日新闻

  • 5分钟掌握Python进化算法:Geatpy高性能优化工具完全指南
  • Microchip 24AA044 EEPROM选型与应用全指南:从参数解析到实战编程
  • 华为的鸿蒙到底有多牛?为什么称作遥遥领先?

周新闻

  • 3步解锁iOS设备:applera1n激活锁绕过完全指南
  • 39 2026 人工智能证书终极盘点,普通人选 AI 证书可以从这些方向入手
  • Redis 暴露公网有多危险?从端口检查到补救步骤

月新闻

  • 【总结】入门篇:50句话让你记住架构核心概念
  • WeChatMsg技术方案解析:实现Mac微信数据自主管理的完整解决方案
  • WeChatMsg:革新性微信数据备份方案,打造你的专属数字记忆库

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号