不清楚你“没想通什么”。建议你搜索"动态规划(DP,dynamic programming)",它是解决问题的算法。
如果不理解什么是"编辑距离(Levenshtein distance)",也可以搜索。网上介绍编辑距离和动态规划的文章非常多,解释也很清楚。
如果不理解什么是"编辑距离(Levenshtein distance)",也可以搜索。网上介绍编辑距离和动态规划的文章非常多,解释也很清楚。
解决方案 »
- 字符串对比??
- 下面的题怎么写。。新手发帖,别笑话
- 询问 权限设计,找寻最佳解决方案灵感_
- 初学.NET 简单的多线程操作问题 哪位大哥帮忙看下
- 如何在VS2005里面声明服务器控件,如何定义aspx的Cs文件与基类cs文件的继承
- 关于Console.Write()的问题
- 请教C#一个多线程的小问题
- 有关datagridview里的progressbar列的问题,这么设置没用呢
- 帮我编辑这个程序有什么问题。
- [总结与提问]关于Crystal Report连接动态生成的dataset的方法的总结和一些新问题(谢谢cancan)
- c#中 如果一个对象的属性名是一个字符串变量的值,代码如何写
- C#报表控件reportViewer如何动态绑定其报表文件及数据集
这个算法中,有一点自始至终保持不变:我们最少只需d[i,j]步操作即可以把(任意)初始的字符段s[1..i] 变换为t[1..j]。当算法执行结束后,数组右下方的元素就是最终结果。
{
public int Compare(string S, string D)
{
if (string.IsNullOrEmpty(S) || string.IsNullOrEmpty(D))
throw new Exception("String should not be empty.");
int[,] array = new int[S.Length + 1, D.Length + 1];
for (int i = 0; i <= S.Length; i++)
array[i, 0] = i;
for (int i = 1; i <= D.Length; i++)
array[0, i] = i;
for (int i = 1; i <= S.Length; i++)
{
for (int j = 1; j <= D.Length; j++)
{
int c = S[i - 1] == D[j - 1] ? 0 : 1;
int n1 = array[i - 1, j] + 1;
int n2 = array[i - 1, j - 1] + c;
int n3 = array[i, j - 1] + 1;
int v = n1 < n2 ? n1 : n2;
array[i, j] = v < n3 ? v : n3;
}
}
return array[S.Length, D.Length];
}
}
如果不理解什么是"编辑距离(Levenshtein distance)",也可以搜索。
至于是课后习题还是面试题,我真不想在此纠结。
1、我可以拿出别人出面试题的照片
2、即使是我拿的课后习题,我拿到这儿来问,有什么问题吗?
3、我面试的,是实验室的工作内容,而我做asp.net时间长了,对算法确实不行了。而他们希望我转做别的语言,所以对算法有要求。