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  .

猜你喜欢

转载自blog.csdn.net/xiamaocheng/article/details/84201020
pm2
今日推荐