package org.psjava.judgesubmit;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
public class WordReplacer {
public static String getReplaced(String original, Set<String> words) {
Map<String, String> matchMap = constructMatchingMap(original, words);
return getReplacedByMap(original, matchMap);
}
private static Map<String, String> constructMatchingMap(String original, Set<String> words) {
Map<String, String> matchMap = new HashMap<String, String>();
int index = 0;
for (String word : words) {
String candidate;
while(true) {
candidate = Integer.toString(index++, 10 + 26);
if(Character.isLetter(candidate.charAt(0)) && !original.contains(candidate))
break;
}
matchMap.put(word, candidate);
}
return matchMap;
}
private static String getReplacedByMap(String original, Map<String, String> matchMap) {
StringBuilder out = new StringBuilder();
String word = "";
for (int i = 0; i < original.length(); i++) {
char c = original.charAt(i);
if (Character.isLetter(c) || Character.isDigit(c)) {
word += c;
} else {
outputReplacedWordIfPossible(word, out, matchMap);
word = "";
out.append(c);
}
}
outputReplacedWordIfPossible(word, out, matchMap);
return out.toString();
}
private static void outputReplacedWordIfPossible(String w, StringBuilder out, Map<String, String> matchMap) {
if (w.length() > 0) {
String v = matchMap.get(w);
if (v == null)
out.append(w);
else
out.append(v);
}
}
}