java中的Rabin Karp算法

时间:2016-10-20 14:58:35

标签: java rabin-karp

我有兴趣实现Rabin-Karp算法来搜索子字符串。以下是我使用的算法:algorithm

我为此制作的代码如下。 但输出是空白的。它说成功构建但没有输出......

package rabinkarp;

public class RabinKarp {

    final static int q = 101;
    final static int d = 256;
    public static void RabinKarpMatcher(String T,String p,int q,int d)
    {
        int n = T.length();
        int M = p.length();
        int H = 1,i,j;
        for (i = 0; i < M-1; i++)
            H = (H*d)%q;
        int P = 0;
        int t = 0;
        for(i = 0;i < M; i++)
        {
            P = (d*P+p.charAt(i))%q;
            t = (d*t+T.charAt(i))%q;
        }
        for(i = 0; i < n-M; i++)
        {
            if(P==t)
            {
                for(j = 0; j < M; j++)
                {
                    if(T.charAt(i+j)!=p.charAt(j))
                    {
                        break;
                    }
                }
                if(j==M)
                {
                    System.out.println("Pattern found at " + i+1);
                }

            }
            if(i < n-M)
            {
                t = (d*(t-T.charAt(i)*H)+T.charAt(i+M))%q;
                if(i <0)
                {
                    t = t+q;
                }
            }
        }

    }
    public static void main(String[] args) {
        String text = new String("ababaaabhahhhha");
        String pat = new String("ha");
        RabinKarpMatcher(text,pat,q,d);
    }

}

0 个答案:

没有答案