Thuật toán dựa trên một nguyên tắc đơn giản. Giả sử rằng chúng ta đang cố gắng khớp một chuỗi con có độ dài n . Trước tiên chúng ta sẽ xem xét nhân vật ở chỉ số m. Nếu ký tự đó không có trong chuỗi, chúng tôi biết rằng chuỗi con chúng tôi muốn không thể bắt đầu bằng các ký tự tại các chỉ số 1 2 .... n
Nếu ký tự đó nằm trong chuỗi của chúng tôi, chúng tôi sẽ cho rằng đó là vị trí cuối cùng trong chuỗi của chúng tôi. Sau đó chúng tôi sẽ nhảy trở lại và bắt đầu cố gắng khớp chuỗi từ nơi bắt đầu có thể. Thông tin này là bảng đầu tiên của tôi.
Khi tôi bắt đầu khớp từ đầu chuỗi con, khi tôi tìm thấy sự không phù hợp, tôi không thể bắt đầu lại từ đầu. Tôi có thể một phần thông qua một trận đấu bắt đầu từ một điểm khác. Ví dụ: nếu tôi đang cố gắng khớp anand trong ananand khớp thành công, anan, nhận ra rằng đây không phải là quảng cáo, nhưng tôi vừa khớp với một, và vì vậy tôi nên quay lại để cố gắng khớp với ký tự thứ ba của mình trong chuỗi con của tôi . Thông tin này, "Nếu tôi thất bại sau khi khớp x ký tự, tôi có thể ở ký tự thứ năm của một trận đấu" được lưu trữ trong bảng thứ hai.
Lưu ý rằng khi tôi không khớp với bảng thứ hai, tôi có thể biết được bao xa trong một trận đấu mà tôi có thể dựa trên những gì tôi vừa khớp. Bảng đầu tiên biết tôi có thể lùi xa bao nhiêu dựa trên nhân vật mà tôi vừa thấy mà tôi không khớp. Bạn muốn sử dụng sự bi quan hơn của hai mẩu thông tin đó.