# Lời giải bài Xâu FIBONACI ###### 📌 Tags: `Simple` . ____ ## Ý tưởng :+1: * Trong C++ việc cộng xâu là ```cpp string a , b; a = a +b; ``` * sau đó ta liên tưởng đến việc tìm trong xâu F[n] có xâu SR hay không ____ ## Nhận xét :bulb: * Để tìm xâu Sr có trong xâu F[n] hay không và đếm số lượng bằng cách nào * Vì string trong c++ hoạt động như là một mảng (lưu ý mảng kiểu string có phần tử đầu tiên là ở chỉ số không và giá trị lưu luôn là char(ký tự) ) -> Ví dụ : string st = "abc"; phần tử đầu tiên là st[0] = 'a'; (mỗi phần tử của string được viết thành char ) * Vậy bài toán viết về đơn giản là với mảng $F[n]$ ta so sánh bằng việc chọn một vị trí bắt đầu so từng phần tử của mảng $F[n]$ với từng phần tử của $sr$ . Hay nếu chọn $i$ làm vị trí bắt đầu thì ta phải so sánh $F[n][i]$ với $sr[0]$ , $F[n][i + 1]$ với $sr[1]$ , ... , $F[n][i + sr.length() - 1]$ với $sr[sr.length() - 1]$ nhưng phải đảm bảo $i + sr.length() - 1 \le F[n].length() - 1$ vì việc xâu con liên tiếp của $F[n]$ mà có độ dài bé hơn xâu sr thì xâu sr bằng xâu con đó là **không thể**. * Thuật này không sợ quá thời gian vì độ dài lớn nhất có thể có của $F[n] \le 10^6$ và độ dài của xâu $sr \le 35$ nên độ phức tạp lớn chỉ là $O(10^6 * 35)$ **(đã được kiểm chứng bằng nộp)** ____