Practice Exercise 5.3

Source Code

import java.math.BigInteger;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;

public class RabinKarp {
    public List<Integer> match(String P, String T) {
        // Good enough for ascii characters.
        int d = 256;
        int m = P.length();
        int n = T.length();
        
        // write your code here

        List<Integer> shifts = new ArrayList<>();
        for (int i = 0; i < n - m + 1; i++) {
            if (ph == th) {
                boolean hasMatch = true;
                for (int j = 0; j < m; j++) {
                    if (P.charAt(j) != T.charAt(i + j)) {
                        hasMatch = false;
                        break;
                    }
                }
                if (hasMatch)
                    shifts.add(i);
            }

            if (i + m < n) {
                th = (th + q - dm * T.charAt(i) % q) % q;
                th = (th * d + T.charAt(i + m)) % q;
            }
        }
        return shifts;
    }

    public static void main(String[] args) {
        RabinKarp rk = new RabinKarp();
        List<Integer> matches = rk.match("rabrabracad", "abacadabrabracabracadabrabrabracad");
        for (Integer i : matches)
            System.out.println(i);
    }
}

Last updated