0
3 Bình luận

Dòng 11 Em k hiểu vì sao chỉ duyệt tới hiệu độ dài 2 văn bản ?
Thanks

Phan Tiến đã bình luận

Hi Em,
Dòng 11 họ chỉ lặp đến hiệu độ dài hai văn bản vì lý do sau:
Giả sử vòng lặp for chạy đến i = max
– Dòng 13: j = i;
– Dòng 15 họ dùng vòng lặp while cho biến length của chuỗi con
Với mỗi lần lặp của biến length thì strSearch tăng lên 1 giá trị ở dòng 16 strSerach.charAt(j++), tức là ban đầu j= max, sau đó j = max +1, j = max + 2, …, j = max + length.
Vì vậy nếu ta không để biến max = hiệu độ dài hai văn bản, thì sẽ xảy ra tình huống bị vượt qua độ dài của chuỗi strSearch.

hoanganh đã bình luận

Thưa thầy, em đang suy nghĩ tới trường hợp:
– i = max thì vòng for cũng kết thúc (i chạy từ 0, i=max tức là i > hiệu 2 chuỗi 1 ký tự)
– Nghĩa là số ký tự còn lại của strSearch k bằng, k đủ cho substring nữa. Tức là k cần duyệt nữa cũng biết là strSearch k chứa substring.
Không biết có đúng k nữa ạ :<

Phan Tiến đã bình luận

Mình lấy ví dụ để em dễ hình dung
strSearch = “cong hoa”
substring = “ha”
max = 8 – 2 = 6
Khi i = max, j = i , k = 0
Câu lệnh 15, cho biến length của chuỗi con giảm 1 mỗi lần lặp
tăng biến j++, tăng biến k++, so sánh strSearch.charAt(j++) với substring.charAt(k++) lúc này strSearch bắt đầu ở “o”, còn chuỗi con bắt đầu bới chứ “h”
Mình thấy đoạn code để tìm một chuỗi có nằm trong chuỗi khác không thì đoạn code này không hay lắm, và khá là rối. Có nhiều đoạn code hoặc em sử hàm contains của chuỗi xem sao.