Trong quá trình duyệt chuỗi, tại mỗi vị trí, nếu là số 7
, ta sẽ biết được nó đang nằm trên chuỗi con liên tiếp của bao nhiêu số 7
, chẳng hạn với chuỗi 72774777
, khi duyệt đến 727747
77
, ta biết được nó đang nằm trên đoạn con liên tiếp 2 số 7
(tức 2 số 7
trong 477
). Khi đó mỗi độ dài tương ứng từ độ dài hiện tại về 1 đều tăng 1 lượt đếm (trong ví dụ này thì độ dài 2 và 1 có thêm 1 lần xuất hiện).
Từ nhận xét trên, cách thuần túy để giải quyết là với mỗi độ dài, ta tăng 1 đơn vị, do đó độ phức tạp sẽ là O(N^2)
- không chạy nổi.
Tuy nhiên đây là bài quen thuộc, ta có thể dùng trick là chỉ tăng 1 ở thằng dài nhất, sau đó mới cập lại lại bảng đếm cuối cùng khi đã duyệt xong chuỗi. Cách cập nhật là ở những đoạn ngắn hơn đều tăng tương ứng số lần xuất hiện của đoạn dài hơn trước đó.
Độ phức tạp: O(N)
.