Xâu đối xứng
Cho xâu ký tự S chỉ gồm các chữ cái in thường, hãy tìm một xâu con đối xứng dài nhất của S.
(Một xâu con của xâu S là một dãy ký tự liên tiếp trong S. Một xâu con gọi là đói xứng nếu nó không thay đổi khi ta viết các ký tự theo thứ tự ngược lại)
Dữ liệu: Vào từ file văn bản PALIND.INP gồm một dòng chứa sâu S gồm không qua 5000 chữ cái thường
Kết quả: Ghi file văn bản PALIND.OUT xâu con tìm được
Vì dụ
PALIND.INP PALIND.OUT
thehannahmontana hannah

const fi=’palind.inp’;
fo=’palind.out’;
var s: ansistring;
max,l,r,n,li,lj: longint;
procedure nhap;
begin
assign(input,fi);
reset(input);
readln(s);
close(input);
end;
function check(l,r:longint):boolean;
var c:longint;
begin
for c:=1 to (r-l+1) div 2 do
if s[l+c-1]<>s[r-c+1] then exit(false);
exit(true);
end;
procedure xuat;
var i,j: longint;
begin
assign(output,fo);
rewrite(output);
max:=0;
n:=length(s);
for i:=1 to n do
for j:=n downto i do
begin
if j-i+1 < max then break;
if check(i,j) then
begin
if j-i+1 > max then
begin
max:=j-i+1;
li:=i;
lj:=j;
end;
break;
end;
end;
for i:=li to lj do
write(s[i]) ;
close(output);
end;
begin
nhap;
xuat;
end.
var str,s:string[100];
n,i:integer;
procedure sx( var a,b:char);
var tam:char;
begin
tam:=a;
a:=b;
b:=tam;
end;
procedure dao(n,i:integer);
var j:integer;
begin
for j:=i+1 to n do
if str[i]=str[j] then
begin
sx(str[j],str[n-i+1]);
exit
end;
end;
begin
clrscr;
write(‘nhap xau:’);readln(str);
n:=length(str);
s:=”;
for i:=n downto 1 do s:=s+str[i];
if str=s then writeln(‘chuoi doi xung:’)
else
begin
writeln(‘chuoi ko doi xung,chuoi da dảo doi xung:’);
for i:=1 to n-1 do
dao(n,i);
end;
write(str);
readln;
end.