My first thought was using a map to store what's been seen and run through the list keeping copying the values that haven't been seen to a new list in order or just marking them as dupes in place with the empty string.
This seems to be the "alt" case and is dismissed by the author but would like to hear a fuller explaination of why this is a problem?