Dạng 3: Một số bài tập xõu Palindrome

Một phần của tài liệu SKKN Kieu xau (Trang 25 - 26)

III. CÁC DẠNG BÀI TẬP THƯỜNG GẶP

3. Dạng 3: Một số bài tập xõu Palindrome

Xõu Palindrome hay cũn gọi là xõu đối xứng, cú nghĩa một xõu khi đọc cỏc ký tự trong xõu từ trỏi sang phải cũng giống từ phải sang trỏi thỡ xõu đú được gọi là xõu Palinhdrome.

Với những bài tập kiểm tra xõu Palindrome hay tỡm kiếm xõu cú tớnh chất Palindrome thỡ trước hết nờn xõy dựng hàm kiểm tra tớnh chất đối xứng của một xõu với độ phức tạp O(n), trờn cơ sở đú chỳng ta giải quyết những bài tập khú hơn.

Bài tập 1: Kiểm tra một xõu cú phải là xõu Palindrome khụng

Program kiemtra; Var i,x:byte; S1,s2:string; Begin Write(‘nhap xau s1’); Readln(s1); X:=length(s1); S2:=’’;

For i:=x downto 1 do s2:=s2+s1[i];

If s1=s2 then write(‘xau s1 la xau palindrome’) Else write(‘xau s1 khụng la xau palindrome’); Readln

End.

Bài tập 2:Xõu con Palindrome: Cho một xõu S cú độ dài khụng vượt quỏ 1000 kớ

tự; tỡm xõu palindrome dài nhất là xõu con của S.

- í tưởng: Sử dụng phương phỏp quy hoạch động bằng cỏch sử dụng mảng 2 chiều F và giỏ trị F[i, j] = true/false nếu đoạn gồm cỏc kớ tự từ i đến j của S cú/khụng là palindrome.

- F[i, i] = True

- F[i, j] = F[i+1, j-1]; ( nếu s[i] = s[j] ) - F[i, j] = False; ( nếu s[i] <> s[j] )

- Đoạn chương trỡnh tham khảo

var s:ansistring; n,i,j,d,max,k,csd,csc:longint; {GV giới thiệu thờm kiểu ansistring }

F: array[0..1001,0..1001] of boolean; {==========}

Begin

Write('nhap s:'); readln(s);

FillChar( F, sizeof(F), false ); n:=length(s); max:=1;

for i := 1 to n do F[i, i] := True; for k := 1 to (n-1) do

for i := 1 to (n-k) do begin

j := i + k;

F[i, j] := ( F[i+1, j-1] ) and (s[i] = s[j] ); end;

for i:=1 to n do

for j:=1 to n do begin

d:=j-i+1;

if (f[i,j]=true) and (d>max) then begin

max:=d; csd:=i; csc:=j; end;

end;

for i:=csd to csc do write(s[i]); readln;

End.

Một phần của tài liệu SKKN Kieu xau (Trang 25 - 26)

Tải bản đầy đủ (DOCX)

(34 trang)
w