import
java.util.HashSet;
import
java.util.Set;
import
java.util.Stack;
import
java.util.StringTokenizer;
/**
*
* @author athakur
*
*/
public
class
RemoveDuplicates {
public
static
void
main(String args[]) {
String input =
"Beginning with the first first first first manned Gemini mission in March 1965, commemorative commemorative medallions were prepared for the astronauts at their request. It is unclear who prepared these early medallions only only, only that each individual box containing a medallion bore the word Fliteline."
;
System.out.println(removeConsecutiveDuplicates(input));
System.out.println(removeConsecutiveDuplicatesBetter(input));
System.out.println(removeAllDuplicates(input));
}
public
static
String removeAllDuplicates(String input) {
StringBuilder outputBuilder =
new
StringBuilder();
Set<String> wordsSet =
new
HashSet<>();
StringTokenizer tokenizer =
new
StringTokenizer(input,
" "
);
while
(tokenizer.hasMoreTokens()) {
String word = tokenizer.nextToken();
if
(wordsSet.add(word)) {
outputBuilder.append(word);
outputBuilder.append(
" "
);
}
}
return
outputBuilder.toString();
}
public
static
String removeConsecutiveDuplicatesBetter(String input) {
StringBuilder outputBuilder =
new
StringBuilder();
String lastWord =
""
;
StringTokenizer tokenizer =
new
StringTokenizer(input,
" "
);
while
(tokenizer.hasMoreTokens()) {
String word = tokenizer.nextToken();
if
(!word.equalsIgnoreCase(lastWord)) {
outputBuilder.append(word);
outputBuilder.append(
" "
);
}
lastWord = word;
}
return
outputBuilder.toString();
}
public
static
String removeConsecutiveDuplicates(String input) {
if
(input ==
null
)
return
null
;
Stack<String> wordsStack =
new
Stack<>();
String[] words = input.split(
" "
);
for
(
int
i =
0
; i < words.length; i++) {
wordsStack.push(words[i]);
}
String lastWord =
""
;
String stringWithNoConsecutiveDuplicates =
""
;
while
(!wordsStack.isEmpty()) {
String tempPop = wordsStack.pop();
if
(!lastWord.equalsIgnoreCase(tempPop)) {
stringWithNoConsecutiveDuplicates = tempPop +
" "
+ stringWithNoConsecutiveDuplicates;
}
lastWord = tempPop;
}
return
stringWithNoConsecutiveDuplicates;
}
}