Element, 22 19 18 bytes
_'{"(3:~'![2:`];'} Example input/output: hello world -> helo wrd
This works by simply processing the string one character at a time and keeping track which ones it has seen before.
_'{"(3:~'![2:`];'} _ input line ' use as conditional { } WHILE loop " retrieve string back from control (c-) stack ( split to get the first character of (remaining) string 3: a total of three copies of that character ~ retrieve character's hash value ' put on c-stack ! negate, gives true if undef/empty string [ ] FOR loop 2:` duplicate and output ; store character into itself ' put remaining string on c-stack as looping condition