您的位置:首页 > 其它

字符串编辑距离

2015-04-24 23:05 218 查看
有两个字符串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;

                }

        }
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: