字符串编辑距离
来源:互联网 发布:sharpdesk扫描软件下载 编辑:程序博客网 时间:2024/06/14 06:46
有两个字符串A和B,对A可以进行如下的操作:插入一个字符,删除一个字符,替换一个字符。问A可以通过最少多少次操作变为B?我们定义这个结果为字符串的最小编辑距离。状态转移方程:
当A!=B[j]时 f[j]=1+min{f[i-1][j],f[j-1],f[i-1][j-1]}
当A==B[j]时
f[j]=f[i-1][j-1]
/**
* 暴力搜索
*
* @param A
* @param B
* @return
*/
public int getMinDistance(String A, String B) {
if (A == null && B == null)
return 0;
if (A == null)
return B.length();
if (B == null)
return A.length();
return getMinDistance(A, A.length() - 1, B, B.length() - 1);
}
private int getMinDistance(String A, int Aright, String B, int Bright) {
if (Aright == 0 && Bright == 0)
return (A.charAt(Aright) == B.charAt(Bright)) ? 0 : 1;
if (Aright == 0) {
for(int i=0;i<=Bright;i++){
if(B.charAt(i)==A.charAt(0)){
return Bright;
}
}
return 1+Bright;
}
if (Bright == 0) {
for(int i=0;i<=Aright;i++){
if(A.charAt(i)==B.charAt(0)){
return Aright;
}
}
return 1+Aright;
}
if (A.charAt(Aright) == B.charAt(Bright)) {
return getMinDistance(A, Aright - 1, B, Bright - 1);
} else {
int t1 = getMinDistance(A, Aright - 1, B, Bright);
int t2 = getMinDistance(A, Aright, B, Bright - 1);
int t3 = getMinDistance(A, Aright - 1, B, Bright - 1);
t1 = t1 < t2 ? t1 : t2;
return (t1 < t3 ? t1 : t3) + 1;
}
}
当A!=B[j]时 f[j]=1+min{f[i-1][j],f[j-1],f[i-1][j-1]}
当A==B[j]时
f[j]=f[i-1][j-1]
/**
* 暴力搜索
*
* @param A
* @param B
* @return
*/
public int getMinDistance(String A, String B) {
if (A == null && B == null)
return 0;
if (A == null)
return B.length();
if (B == null)
return A.length();
return getMinDistance(A, A.length() - 1, B, B.length() - 1);
}
private int getMinDistance(String A, int Aright, String B, int Bright) {
if (Aright == 0 && Bright == 0)
return (A.charAt(Aright) == B.charAt(Bright)) ? 0 : 1;
if (Aright == 0) {
for(int i=0;i<=Bright;i++){
if(B.charAt(i)==A.charAt(0)){
return Bright;
}
}
return 1+Bright;
}
if (Bright == 0) {
for(int i=0;i<=Aright;i++){
if(A.charAt(i)==B.charAt(0)){
return Aright;
}
}
return 1+Aright;
}
if (A.charAt(Aright) == B.charAt(Bright)) {
return getMinDistance(A, Aright - 1, B, Bright - 1);
} else {
int t1 = getMinDistance(A, Aright - 1, B, Bright);
int t2 = getMinDistance(A, Aright, B, Bright - 1);
int t3 = getMinDistance(A, Aright - 1, B, Bright - 1);
t1 = t1 < t2 ? t1 : t2;
return (t1 < t3 ? t1 : t3) + 1;
}
}
0 0
- 字符串的编辑距离
- 字符串编辑距离查表法
- 求字符串编辑距离
- 字符串的编辑距离
- 字符串编辑距离
- 字符串编辑距离
- 1020 字符串编辑距离
- 字符串编辑距离
- 字符串编辑距离
- 字符串编辑距离
- 字符串编辑距离
- 求字符串编辑距离
- 字符串编辑距离
- 字符串编辑距离算法
- 编辑字符串距离
- 字符串编辑距离
- 字符串编辑距离
- 字符串编辑距离
- Eclipse插件6
- 开发网站合集
- 游戏归属感
- 蓝桥杯——博弈论问题
- UIView 常见属性
- 字符串编辑距离
- 基于 robocup 机器人足球仿真2D的多主体动态不可测问题
- compass 制作精灵图
- Eclipse插件5
- Apache POI工具对excel文件操作的简单使用
- uva 1523
- input标签的hidden属性,四大常用JSTL标签库
- 抽象类abstract的特点
- 错误78“Web.NewsDetail”不包含“Label1”的定义,并且找不到可接受类型为“Web.NewsDetail”的第一个参数的扩展方法“Label1”(是否缺少 using 指令或程序