Mình có một bài toán trong sách nhưng không hiểu thuật toán của nó.
Cho xâu s (độ dài không vượt quá 10^6) chỉ gồm 2 ký tự ‘A’ và ‘B’. Đếm số cách chọn cặp chỉ số (i, j) mà xâu con liên tiếp từ kí tự thứ i đến kí tự thứ j của xâu s có số lượng kí tự ‘A’ bằng số lượng kí tự ‘B’.
Input: Tệp AB.INP gồm 1 dòng duy nhất chứa xâu s
Output: Tệp AB.OUT một dòng duy nhất chứa 1 số là kết quả bài toán
Ví dụ:
AB.INP: ABAB
AB.OUT: 4
Đây là thuật toán của bài được viết bằng Pascal
const MAX = 1000000
fi = 'AB.INP';
fo = 'AB.OUT';
var s: ansistring
c: array[-MAX..MAX] of longint;
f: text;
i, sum: longint;
count: int64;
BEGIN
assign(f, fi); reset(f);
read(f, s);
close(f);
fillchar(c, sizeof(c), 0);
c[0] := 1;
sum := 0;
count := 0;
for i := 1 to length(s) do begin
if (s[i] = 'A') then sum := sum - 1;
else sum := sum + 1;
count := count + c[sum];
inc(c[sum]);
end;
assign(f, fo); rewrite(f);
write(f, count);
close(f);
END.
Mọi người có thể giải thích cho mình không? Mình xin cảm ơn