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

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

0 bình luận về “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”

  1. 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.

    Bình luận
  2. 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.

    Bình luận

Viết một bình luận