CDF62846-CEAA-4ABF-821D-4C86DBCD2F3B

Download as pdf or txt
Download as pdf or txt
You are on page 1of 2

import java.io.

BufferedReader;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.HashMap;

public class BoyerMoore {


private final int R;
private int[] right;
private char[] pattern;
private String pat;

public BoyerMoore(String pat) {


this.R = 256;
this.pat = pat;

// position of rightmost occurrence of c in the pattern


right = new int[R];
for (int c = 0; c < R; c++)
right[c] = -1;
for (int j = 0; j < pat.length(); j++)
right[pat.charAt(j)] = j;
}

public int search(String txt) {


int M = pat.length();
int N = txt.length();
int skip;
for (int i = 0; i <= N - M; i += skip) {
skip = 0;
for (int j = M-1; j >= 0; j--) {
if (pat.charAt(j) != txt.charAt(i+j)) {
skip = Math.max(1, j -
right[txt.charAt(i+j)]);
break;
}
}
if (skip == 0) return i;
}
return N;
}

public static void main(String[] args) throws IOException {


BufferedReader reader = new BufferedReader(new
FileReader("generated_text.txt"));
String pattern = reader.readLine();
String text = reader.readLine();
reader.close();

long startTime = System.nanoTime();

BoyerMoore boyermoore1 = new BoyerMoore(pattern);


int offset1 = boyermoore1.search(text);

long endTime = System.nanoTime();


long timeTaken = endTime - startTime;

FileWriter writer = new FileWriter("output.txt");


writer.write("Offset: " + offset1 + "\n");
writer.write("Time taken: " + timeTaken + "
nanoseconds");
writer.close();
}
}

You might also like