Cho xâu kí tự S bao gồm toàn các ký tự ‘a’ và ‘b’, không quá 255 ký tự. Dãy con đúng của dãy S là một dãy con liên tục bất kì của S bao gồm các ký tự giống nhau. Dãy con đúng bậc 1 của dãy S là một dãy con liên tục bất kỳ của dãy S bao gồm các ký tự giống nhau nhưng được thêm 1 ký tự khác (ví dụ ‘aaaabaaa’, baaaa, aaaab). Trường hợp đặc biệt, dãy S chỉ có 1 loại ký tự thì dãy con đúng cũng chính là dãy con đúng bậc 1.
Yêu cầu: a/ Hãy tính độ dài lớn nhất dãy con đúng của dãy S.
b/ Hãy tính độ dài lớn nhất dãy con đúng bậc 1 của dãy S.
Ví dụ: ‘aaabaaabbaaaaa’
Độ dài lớn nhất của dãy con đúng: 5 (‘aaabaaabbaaaaa’)
Độ dài lớn nhất của dãy con đúng bậc 1: 7 (‘aaabaaabbaaaaa’)
program ft;
uses crt;
var x,i,n,j,k,l,t,p,tg:integer;
a,b,c:array[1..1000] of integer;
s,s1,s2,z:string;
m,r:char;
function kt(s1:string):boolean;
var ktt:boolean;
i,j,k:integer;
begin
ktt:=false;
k:=0;
for i:=1 to length(s1)-1 do
if s1[i]=s1[i+1] then k:=k+1;
if k=length(s1) then ktt:=true;
kt:=ktt;
end;
function kopo(s1:string):integer;
var i,j,k,l:integer;
m,z:char;
begin
k:=0;l:=0;
m:='a';
z:='b';
for i:=1 to length(s1) do
if s1[i]=m then k:=k+1;
for i:=1 to length(s1) do
if s1[i]=z then l:=l+1;
if k>=l then kopo:=k else kopo:=l;
end;
begin
clrscr;
write('Nhap xau:');readln(s);
m:='a';
r:='b';
j:=0;
k:=1;
repeat
t:=0;
for i:=k to length(s) do
if s[i]=m then t:=t+1 else break;
j:=j+1;
a[j]:=t;
k:=k+1;
until k>length(s);
k:=1;
repeat
t:=0;
for i:=k to length(s) do
if s[i]=r then t:=t+1 else break;
j:=j+1;
a[j]:=t;
k:=k+1;
until k>length(s);
for i:=1 to j-1 do
for k:=i+1 to j do
if a[i]<a[k] then
begin
tg:=a[i];
a[i]:=a[k];
a[k]:=tg;
end;
if kt(s) then writeln('Do dai lon nhat cua day con dung:',length(s)) else
writeln('Do dai lon nhat cua day con dung:',a[1]);
k:=1;
j:=0;
repeat
z:='';
for i:=k to length(s) do
z:=z+s[i];
if kopo(z)=length(z)-1 then
begin
j:=j+1;
c[j]:=length(z);
end;
k:=k+1;
until k>length(s);
k:=length(s);
repeat
z:='';
for i:=k downto 1 do
z:=z+s[i];
if kopo(z)=length(z)-1 then
begin
j:=j+1;
c[j]:=length(z);
end;
k:=k-1;
until k>length(s);
for i:=1 to j-1 do
for l:=i+1 to j do
if c[i]<c[l] then
begin
tg:=c[i];
c[i]:=c[l];
c[l]:=tg;
end;
if kt(s) then writeln('Do dai lon nhat cua day con dung bac 1:',length(s)) else
writeln('Do dai lon nhat cua day con dung bac 1:',c[1]);
readln
end.
>>> Nếu bạn luôn buồn phiền hãy dùng hy vọng để chữa trị <<<
Và ...
>>> Không bao giờ nói bạn đã thất bại
Cho đến khi đó là nỗi lực cuối cùng của bạn
Và không bao giờ nói rằng:
Đó là nỗi lực cuối cùng của bạn
Cho tới khi bạn đã thành công >>>
~ Mystic Lâm