Теоретический материал

program bor1;

{$APPTYPE CONSOLE}

uses
  SysUtils;
const
  maxEl=1000;
type
  PEl = ^TEl;
  TEl = record
      f : boolean; // Имеется ли в множестве данная строка
      Link : array ['a' .. 'z'] of PEl; // Указатели на "детей"
    end;
var
  bor : array [0 .. maxEl] of TEl;
  uk : integer;
  root : PEl;

procedure Init;
  begin
    fillchar(bor, sizeof(bor), 0);
    uk := 0;
    root := @bor[0];
  end;

procedure Insert(const s:string);
  var
    cur : PEl;
    i : integer;
  begin
    cur:=root;
    for i := 1 to length(s) do
      begin
        if cur^.Link[s[i]] = nil then
          begin
            inc(uk);
            cur^.Link[s[i]] := @bor[uk];
          end;
        cur:=cur^.Link[s[i]];
      end;
    cur^.f := true;
  end;

procedure Delete(const s:string);
  var
    cur : PEl;
    i : integer;
  begin
    cur:=root;
    for i := 1 to length(s) do
      begin
        if cur^.Link[s[i]] = nil then
          begin
            Writeln('No such string');
            exit;
          end;
        cur:=cur^.Link[s[i]];
      end;
    cur^.f := false;
  end;

function Search(const s:string) : boolean;
  var
    cur : PEl;
    i : integer;
  begin
    cur:=root;
    for i := 1 to length(s) do
      begin
        if cur^.Link[s[i]] = nil then
          begin
            result := false;
            exit;
          end;
        cur:=cur^.Link[s[i]];
      end;
    result := cur^.f;
  end;


begin
  Init;
  Insert('SFdsdf');
  Insert('SFdsdwe');
  Insert('SFdew');
  Writeln(Search('SFdew'));
  Readln;
end.