字符串编辑距离

来源:互联网 发布: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;
                }
        }
0 0
原创粉丝点击