program WordBreakSegment;
const
DictSize = 11;
MaxLen = 255;
type
DictArray = array[1..DictSize] of string;
function IsInDict(word: string; dict: DictArray): boolean;
var
i: integer;
begin
IsInDict := false;
for i := 1 to DictSize do
if dict[i] = word then
begin
IsInDict := true;
exit;
end;
end;
procedure WordBreak(str: string; strsize: integer; result: string; dict: DictArray);
var
i: integer;
subStr: string;
begin
for i := 1 to strsize do
begin
subStr := Copy(str, 1, i);
if IsInDict(subStr, dict) then
begin
if i = strsize then
begin
writeln(result + subStr);
exit;
end
else
WordBreak(Copy(str, i + 1, strsize - i), strsize - i, result + subStr + ' ', dict);
end;
end;
end;
var
dict: DictArray;
str: string;
begin
dict[1] := 'butterfly';
dict[2] := 'basketball';
dict[3] := 'bagpiper';
dict[4] := 'and';
dict[5] := 'play';
dict[6] := 'with';
dict[7] := 'butter';
dict[8] := 'fly';
dict[9] := 'basket';
dict[10] := 'ball';
dict[11] := 'bags';
str := 'butterflyplaybasketballwithbags';
WordBreak(str, Length(str), '', dict);
end.
(*
run:
butter fly play basket ball with bags
butter fly play basketball with bags
butterfly play basket ball with bags
butterfly play basketball with bags
*)