Đếm xuất hiện mẫu (KMP)

Đề bài

Mô tả

Cho xâu văn bản S độ dài N và xâu mẫu P độ dài M, chỉ gồm các chữ cái thường (az).

Hãy đếm số lần xâu mẫu P xuất hiện trong S với tư cách là một xâu con liên tiếp. Hai lần xuất hiện được phép chồng lấp (nghĩa là hai vị trí bắt đầu khác nhau đều được tính, ngay cả khi các đoạn của chúng giao nhau).

Dữ liệu vào

  • Dòng 1: xâu S.
  • Dòng 2: xâu mẫu P.

Dữ liệu ra

In ra một số nguyên duy nhất là số lần P xuất hiện trong S.

Ràng buộc

  • 1MN106.
  • SP chỉ gồm các chữ cái thường az.

Ví dụ

Input Output Giải thích
ababab
aba
2 Mẫu aba xuất hiện tại vị trí 1 (ababab) và vị trí 3 (ababab). Hai lần xuất hiện chồng lấp ký tự a ở vị trí 3.
aaaaa
aa
4 Mẫu aa xuất hiện tại các vị trí bắt đầu 1, 2, 3, 4.
abcabcabc
abcd
0 Mẫu abcd không xuất hiện trong S.

Ghi chú

Với N lên tới 106, lời giải kiểm tra mọi vị trí bắt đầu một cách ngây thơ sẽ không đủ nhanh. Hãy nghĩ tới một thuật toán so khớp xâu chạy trong thời gian tuyến tính theo N+M.

Bình luận

Không có bình luận tại thời điểm này.

gnatmake 12.2.0 a68g 3.1.2 nasm 2.16.1 as_x64 2.46 awk 1.3.4 gcc 16.1.0 csc 6.12.0.200 g++ 16.1.0 g++-themis 16.1.0 g++17 16.1.0 g++20 16.1.0 g++23 16.1.0 clang++ 22.1.6 dmd 2.112.0 dart 3.12.1 gforth 0.7.3 gfortran 12.2.0 go 1.26.3 groovyc 5.0.6 javac 25.0.3 node 26.2.0 kotlinc 2.3.21 sbcl 2.2.9 lua 5.4.8 nim 2.2.10 fpc 3.2.2 fpc-themis 3.2.2 perl 5.36.0 php 8.5.6 pike 8.0 pypy3 7.3.23 python3 3.14.5 racket 8.7 ruby 4.0.5 rustc 1.96.0 csc 5.3.0 ctoj-scratch 0.0.1 sed 4.9 tclsh 8.6 bun 1.3.14 deno 2.8.1 v 0.5.1 zig 0.16.0