Dữ liệu vào cho trong tập tin văn bản CHUOI.INP gồm nhiều dòng, mỗi dòng là một chuỗi kí tự cần xem xétcác chuỗi có độ dài không quá 80 kí tự.. Kết quả ghi trong tập tin văn bản CHUOI.OU[r]
Trang 1Bài 11 Chuỗi đối xứng
Mỗi chuỗi kí tự được gọi là đối xứng nếu nó có không ít hơn 1 kí tự và nếu ta đọc từ phải sang trái hay từ trái sang phải đều giống nhau Ví dụ ' Z ' , ' TOT ' , ' NAN ' là các chuỗi đối xứng còn ' NAM ' không phải.Yêu cầu:
Viết chương trình nhận vào chuỗi kí tự cho trước S và hãy cho biết có bao nhiêu chuỗi con khác nhau của S là chuỗi đối xứng Chuỗi con của S là chuỗi gồm một số kí tự nằm liên tiếp nhau trong S
Dữ liệu vào cho trong tập tin văn bản CHUOI.INP gồm nhiều dòng, mỗi dòng là một chuỗi kí tự cần xem xét(các chuỗi có độ dài không quá 80 kí tự )
Kết quả ghi trong tập tin văn bản CHUOI.OUT có số dòng bằng với số dòng của CHUOI.INP Mỗi dòng chứa một số nguyên là con số cho biết số chuỗi con đối xứng của
chuỗi ở dòng tương ứng trong CHUOI.INP.Ví dụ:
program chuoi;
use crt;
var s:string;
f,f1:text;
a:array[1 200] of string;
Function dx(s:string):boolean;
var bl:boolean; i:word;
Begin
bl:=true;
For i:=1 to length(s) do
If s[i] <> s[length(s)-i+1] then bl:=false;
dx:=bl;
End;
Function from(s:string;d:word):boolean;
var i:word; bl:boolean;
Begin
bl:=false;
If d=0 then bl:=false
Else For i:=1 to d do
If s=a[i] then bl:=true;
from:=bl;
End;
Function xet(s:string):word;
var s1:string; d,i,j:word;
Begin
Trang 2fillchar(a,sizeof(a),0);
d:=0;
For i:=1 to length(s) do
For j:=1 to length(s)-i+1 do Begin
s1:=copy(s,i,j);
If dx(s1) then
If not from(s1,d) then Begin
inc(d); a[d]:=s1; End;
End;
xet:=d;
End;
Begin
assign(f,'chuoi.inp'); Reset(f); assign(f1,'chuoi.out');
Rewrite(f1);
While not eof(f) do
Begin
Readln(f,s);
Writeln(f1,xet(s));
End;
Close(f);Close(f1);
End