Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- {$MODE DELPHI}
- {$R+,S+,Q+,I+,C+,M+,H+,O+}
- {R-,S-,Q-,I-,C-,M-,H-,O+}
- uses
- SysUtils, Math;
- var
- i, ls : longint;
- s, t : string;
- function test(t : string) : boolean;
- var
- i, j, p, lt, cj, k : longint;
- ok : boolean;
- begin
- result := false;
- lt := length(t);
- t := t + '$$$';
- j := 1;
- i := 0;
- while i < ls do begin
- inc(i);
- if s[i] = '?' then begin
- if j > lt then exit;
- inc(j);
- end else
- if s[i] = '*' then begin
- p := 0;
- while s[i + 1] = '?' do begin
- inc(i);
- inc(p);
- end;
- if i > ls then begin
- result := lt - j + 1 >= p;
- exit;
- end else begin
- inc(i);
- if i > ls then begin
- result := true;
- exit;
- end;
- inc(j, p);
- if j > lt then exit;
- while j <= lt do begin
- ok := true;
- cj := j;
- for k := i to ls do begin
- if cj > lt then exit;
- if (s[k] <> '?') and (s[k] <> t[cj]) then begin
- inc(j);
- ok := false;
- while (j <= lt) and (t[j] <> s[i]) do inc(j);
- if j > lt then exit;
- break;
- end;
- inc(cj);
- end;
- if ok and (cj - lt = 1) then begin
- result := true;
- exit;
- end else
- if ok and (k >= ls) then begin
- inc(j);
- continue;
- end;
- end;
- end;
- end else
- if (j > lt) or (s[i] <> t[j]) then exit else inc(j);
- end;
- result := j - lt = 1;
- end;
- begin
- readln(s);
- ls := length(s);
- s := s + '$$$';
- for i := 1 to 5 do begin
- readln(t);
- if test(t) then writeln('YES') else writeln('NO');
- end;
- end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement