经典算法回顾2


public class Main1 {
    static String s1 = "abcd";
    static String s2 = "abce";
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        /*
         * 字符串相似度
         * 概念:
         * 对于两个字符串A和B,通过基本的增删改将字符串A改成B,或者将B改成A,
         * 在改变的过程中使用的最小步骤称之为“编辑距离”
         */
        System.out.println(LD());
    }
    public static int LD(){
        int a[][] = new int[s1.length()+1][s2.length()+1];
        for(int i = 0; i <= s1.length(); i++){
            a[i][0] = i;
        }
        for(int j = 0; j <= s2.length(); j++){
            a[0][j] = j;
        }
        for(int i = 1; i <= s1.length(); i++){
            for(int j = 1; j <= s2.length(); j++){
                if(s1.getBytes()[i-1] == s2.getBytes()[j-1]){
                    a[i][j] = a[i-1][j-1];
                }
                else{
                    int temp = Math.min(a[i-1][j], a[i][j-1]);
                    a[i][j] = Math.min(temp, a[i-1][j-1]) + 1;
                }
            }
        }
        return a[s1.length()][s2.length()];
    }
}
public class Main2 {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        /*
         * KMP算法
         */
        String str1 = "ababcabababdc";
        String str2 = "abc";
        System.out.println("fff");
        int index = KMP(str1,str2);
        System.out.println(index);
    }
    static int KMP(String str1, String str2){
        int i = 0;
        int j = 0;
        int[] next = new int[str2.length()];
        next = GetNextVal(str2);
        while(i < str1.length() && j < str2.length()){
            if(j == -1 || str1.getBytes()[i] == str2.getBytes()[j]){
                i++;
                j++;
            }
            else{
                j = next[j];
            }
        }
        if(j == str2.length()){
            return i - str2.length();
        }
        return -1;
    }
    static int[] GetNextVal(String str2){
        int k= -1;
        int j = 0;
        int[] next = new int[str2.length()];
        next[j] = -1;
        while(j < str2.length() -1){
            if(k == -1 || str2.getBytes()[k] == str2.getBytes()[j]){
                next[++j] = ++k;
            }
            else{
                k = next[k];
            }
        }
        return next;
    }
}

优质内容筛选与推荐>>
1、Oracle经典查询案例
2、Linux下UDP的组播接收和发送的简单例子
3、Xen
4、Mahout源码MeanShiftCanopyDriver分析之一初识
5、leetcode 415. Add Strings


长按二维码向我转账

受苹果公司新规定影响,微信 iOS 版的赞赏功能被关闭,可通过二维码转账支持公众号。

    阅读
    好看
    已推荐到看一看
    你的朋友可以在“发现”-“看一看”看到你认为好看的文章。
    已取消,“好看”想法已同步删除
    已推荐到看一看 和朋友分享想法
    最多200字,当前共 发送

    已发送

    朋友将在看一看看到

    确定
    分享你的想法...
    取消

    分享想法到看一看

    确定
    最多200字,当前共

    发送中

    网络异常,请稍后重试

    微信扫一扫
    关注该公众号





    联系我们

    欢迎来到TinyMind。

    关于TinyMind的内容或商务合作、网站建议,举报不良信息等均可联系我们。

    TinyMind客服邮箱:support@tinymind.net.cn