http://qs321.pair.com?node_id=147901

We theoreticians always claim it's worth expending extra effort to find the best algorithm for the task. As you can see, the program itself is entirely straightforward Perl.
#!/usr/local/bin/perl -w use strict; my$t=",rtlr\n h ahkP tcraneeeusoJ"; my$s=join'',sort split//,$t; my(@t); while ($s=~/(.)\1*/sg){my$l=$1;push@t,(pos$t)-1 while$t=~/$l/g} my$i=0;print map{substr($s,$i=$t[$i],1)}(1..@t)