PM 算法

PM 算法部分实现方案:

实现如下:

package demo_1118;

public class PM算法 {

    public  static int PM(String T,String ){
        int [] next=BuildNextImproved(p);

        int i=0;
        int j=0;

        while(j<P.length() && i<T.length()){
            ShowProgress(T,P,i-j,j);

            if(0>j|| T.charAt(i)==P.charAt(j)){
                i++;
                j++;
            }
        }
        return (i-j);
    }


    protected  static  int[]  BuildNext(String P){
        int [] next=new int[P.length()];
        int j=0;
        int t=next[0]=-1;
        while(j<P.length()-1){
            if (0>t||P.charAt(j)==P.charAt(t)){
                j++;
                t++;
                next[j]=t;
            }

            for (j=0;i<P.length();j++){
                System.out.println("\t"+P.charAt(j));
                System.out.println("\n");
            }
        }

    }


    protected  static  int[] BuildNextImproved(String P){
        int[] next=new int[P.length()];
        int j=0;
        int t=next[0]=-1;

        while(j<P.length()-1){
            if (0>t|| P.charAt(j)==P.charAt(t)){
                j++;
                t++;
                next[j]=(P.charAt(j)!=P.charAt(t))? t:next[t];
            }else{
                t=next[t];

                for (j=0;j<P.length();j++)
                    System.out.print("\t"+P.charAt(j));	System.out.print("\n");

                    ShowNextTable(next,0,P.lngth());
            }
        }
        return (next);
    }



    private static void ShowNextTable(int[] next, int i, int length) {
       int i;
      for (int i=0;i<offset;i++)
          System.out.println("\t");
      for (i=0;i<length;i++)
          System.out.println("\t"+N[i]);
    }



    protected   static  void  ShowProgress(String T,String P,int i,int j){
        int  t;
        System.out.println("---------------------------------");
        for(t=0;t<T.length();t++)
            System.out.prnt("\t"+T.charAt(t));
        System.out.println("\n");

         if(0<=i+j){
             for (t=0;t<i+j;t++){
                 System.out.print("t");
                 System.out.println("\t|");
             }
         }

         for(t=0;t<i;t++){
             System.out.println("\t");
         }

         for (t=0;t<P.length();t++){
             System.out.println("\t"+P.charAt(t));
             System.out.println("\n");
         }
         System.out.println();

    }
}

 

参考DJU DS  .

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

执于代码

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值