Chúng ta cần viết một hàm JavaScript nhận vào một chuỗi làm đối số duy nhất. Nhiệm vụ của hàm là đếm tất cả các chuỗi con liên tiếp trong chuỗi đầu vào chứa đúng một ký tự riêng biệt.
Hàm sau đó nên trả về số lượng tất cả các chuỗi con như vậy.
Ví dụ:
Nếu chuỗi đầu vào là:
const str = 'iiiji';
Thì đầu ra nên là:
const output = 8;
vì các chuỗi mong muốn là:
'iii', 'i', 'i', 'i', 'i', 'j', 'ii', 'ii'
Ví dụ
Dưới đây là mã nguồn:
const str = 'iiiji'; const countSpecialStrings = (str = '') => { let { length } = str; let res = length; if(!length){ return length; }; for (let j = 0, i = 1; i < length; ++ i) { if (str[i] === str[j]) { res += i - j; } else { j = i; } }; return res; } console.log(countSpecialStrings(str));Kết quả
Đầu ra trên console:
8
Giải thích: Đếm substrings chỉ chứa 1 ký tự duy nhất. Với run-length encoding: nhóm ký tự liên tiếp giống nhau. Nhóm độ dài L cho L*(L+1)/2 substrings. Code dùng 2 con trỏ j (start run), i (duyệt). Khi str[i]==str[j], thêm (i-j) substrings mới kết thúc tại i. O(n) time.