51Nod-1183-编辑距离
来源:互联网 发布:钓鱼生成软件下载 编辑:程序博客网 时间:2024/06/05 14:18
51Nod-1183-编辑距离
1183 编辑距离编辑距离,又称Levenshtein距离(也叫做Edit Distance),是指两个字串之间,由一个转成另一个所需的最少编辑操作次数。许可的编辑操作包括将一个字符替换成另一个字符,插入一个字符,删除一个字符。例如将kitten一字转成sitting:sitten (k->s)sittin (e->i)sitting (->g)所以kitten和sitting的编辑距离是3。俄罗斯科学家Vladimir Levenshtein在1965年提出这个概念。给出两个字符串a,b,求a和b的编辑距离。Input第1行:字符串a(a的长度 <= 1000)。第2行:字符串b(b的长度 <= 1000)。Output输出a和b的编辑距离Input示例kittensittingOutput示例3
解题方法
51Nod的题近乎都是模板题,此题也不例外。
该题是莱文斯坦距离算法的模板题。
利用动态规划来解。
子问题定义为:
遍历到A的第i个字符,B的第j个字符时,f[i][j]为当前的操作数。
动态转移方程式为:
f[i][j] = min(f[i-1][j]+1, f[i][j-1]+1, f[i-1][j-1]+(A[i-1] != B[j-1]))f[i][j] = min(删除操作数,插入操作数,替换操作数)
可以翻墙的可以看看维基百科上对编辑距离的一些资料——编辑距离
解题代码
def solve(A, B): la, lb = len(A), len(B) f = [[0 for _ in range(lb+1)] for _ in range(la+1)] for i in range(la+1): f[i][0] = i for i in range(lb+1): f[0][i] = i for i in range(1, la+1): for j in range(1, lb+1): #min(删除操作数,插入操作数,替换操作数) f[i][j] = min(f[i-1][j]+1, f[i][j-1]+1, f[i-1][j-1]+(A[i-1] != B[j-1])) return f[la][lb]while True: try: A = input() B = input() print(solve(A, B)) except EOFError: break
阅读全文
0 0
- 51nod 1183 编辑距离
- 51nod 1183 编辑距离
- 51nod 1183 编辑距离
- 51nod 1183 编辑距离
- [51nod]1183 编辑距离
- 51 nod 1183 编辑距离
- 51nod--1183 编辑距离
- 51nod 1183 编辑距离
- 51nod 1183 编辑距离
- 51Nod 1183 编辑距离
- 51nod 1183 编辑距离
- 51Nod 1183 编辑距离
- 51Nod 1183编辑距离
- 51Nod 1183编辑距离
- 51Nod-1183-编辑距离
- 51Nod 1183:编辑距离
- 51nod 1183 编辑距离
- 51Nod-1183 编辑距离
- 时间—真实的货币
- pyautogui (一)
- 写出几种IE6的解决方法
- 详解JavaScript变量提升
- Hibernate第二天
- 51Nod-1183-编辑距离
- 回到顶部效果
- 缓存机制常见问题
- 遍历获取list集合的值并通过aJax传给后端
- 使用VisualSVN Server搭建SVN服务器
- java.lang.NoClassDefFoundError: javax/mail/Message
- 浅谈require和import
- hash(二分+hash)使用map会tle
- Unity3D