Задача 1
Используя алгоритм Рабина - Карпа, реализовать функцию поиска первого вхождения подпоследовательности объектов в последовательности объектов. Функция должна иметь интерфейс
public static int subsequence(List whole, List part)
и выдавать индекс начала части в целом, а если подпоследовательность не найдена, то результатом должно быть значение -1. Равенство элементов списков определяется применением метода equals.
Задача 2
Используя алгоритм Рабина - Карпа, реализовать функцию поиска в строке первого вхождения одной из заданных подстрок. Функция должна иметь интерфейс
public static IntPair substring(String whole, List parts)
и выдавать значение типа IntPair, содержащее пару индексов - индекс начала найденной подстроки в строке и индекс найденной подстроки в списке подстрок. Если ни одна из заданных подстрок в строке не найдена, функция должна выдавать значение null. Строки в списке parts, вообще говоря, могут иметь разную длину. Тип данных IntPair определяется следующим описанием класса.
public class IntPair {
private int first, second;
public IntPair(int first, int second) {
this.first = first; this.second = second;
}
public int getFirst() { return first; }
public int getSecond() { return second; }
}