Cho một chuỗi dài tối đa 255 kí tự. Tìm 1 đọan có các kí tự liên tiếp giống nhau và dài nhất
Dữ liệu đầu vào được lưu trong tệp xau1.txt có 1 dòng là chuỗi kí tự
Kết quả ghi vào tệp xau2.txt ghi 2 số nguyên tương ứng là chỉ số bắt đầu và chỉ số kết thúc của đoạn tìm được trên cùng một dòng được cách nhau bằng dấu hai chấm
vd:
xau1.txt | xau2.txt |
abcaaaaddccccccaaad | 10:16 |
var f:text;
s:string;
i,dem,max,dau,cuoi:byte;
begin
assign(f,'xau1.txt'); reset(f);
readln(f,s);
close(f);
assign(f,'xau2.txt'); rewrite(f);
dem:=1; max:=1; dau:=1; cuoi:=1;
for i:=1 to length(s)-1 do
begin
if s[i]=s[i+1] then inc(dem) else dem:=1;
if dem>max then
begin
max:=dem;
cuoi:=i+2;
dau:=cuoi-dem;
end;
end;
write(f,dau,':',cuoi);
close(f);
readln;
end.
Program hotrotinhoc;
const fi='xau1.txt';
fo='xau2.txt';
var
f:text;
s:string;
i,d,c,j:byte;
procedure ip;
begin
assign(f,fi);
reset(f);
read(f,s);
close(f);
end;
procedure out;
begin
assign(f,fo);
rewrite(f);
j:=0;
for i:= 1 to length(s) do
begin
if j=0 then j:=i;
if s[i] <> s[i+1] then
begin
if ((i-j)+1)>((c-d)+1) then
begin
d:=j;
c:=i;
end;
j:=0;
end;
end;
write(f,d,':',c);
close(f);
end;
BEGIN
ip;
out;
END.
16 là đến chữ a không phải chữ c mà. Nếu bạn muốn in ra 16 thì chỉ cần write(f,d,':',c+1);
const fi='xau1.txt';
fo='xau2.txt';
var
f:text;
s:string;
i,d,c,j:byte;
procedure ip;
begin
assign(f,fi);
reset(f);
read(f,s);
close(f);
end;
procedure out;
begin
assign(f,fo);
rewrite(f);
j:=0;
for i:= 1 to length(s) do
begin
if j=0 then j:=i;
if s[i] <> s[i+1] then
begin
if ((i-j)+1)>((c-d)+1) then
begin
d:=j;
c:=i;
end;
j:=0;
end;
end;
write(f,d,':',c);
close(f);
end;
BEGIN
ip;
out;
END.