<?xml version="1.0" encoding="windows-1252"?>
<node id="53291" title="Re: Unique-Character Substring" created="2001-01-21 04:08:01" updated="2005-07-21 01:25:10">
<type id="11">
note</type>
<author id="13201">
dchetlin</author>
<data>
<field name="doctext">
Well, heck, if we're going to do this re-posting in a different
medium thing, here's what I had on FWP. Without benchmarking,
I put my money on it being faster.

&lt;code&gt;#!/usr/bin/perl -w
use strict;

local $" = ',';
while (&lt;DATA&gt;) {
  chomp;
  my @chars = split //;
  my $index = -1;
  my %seen = ();
  my $answer = [""];
  while (++$index &lt; @chars) {
    if (exists $seen{$chars[$index]}) {
      answer_set(\%seen, $answer);
      $index = $seen{$chars[$index]};
      %seen = ();
    } else {
      $seen{$chars[$index]} = $index;
    }
  }
  answer_set(\%seen, $answer);
  print "$_: @$answer\n";
}

sub answer_set {
  my $seen = shift;
  goto 'JUMP_' . ((keys %$seen &lt;=&gt; length $_[0][0]) + 1);
  JUMP_0:
    return;
  JUMP_2:
    $_[0] = [];
  JUMP_1:
    push @{$_[0]},
      join "", sort { $seen-&gt;{$a} &lt;=&gt; $seen-&gt;{$b} } keys %$seen;
    return;
}
__DATA__
mississippi
abcbef
adbcbef
that
abcdefa
abcdabc
testing
this test
abcdefg&lt;/code&gt;

&lt;p&gt;-dlc</field>
<field name="root_node">
53151</field>
<field name="parent_node">
53151</field>
</data>
</node>
