Input: 一个字符串, 每个字符都有几个对应的replacement.
Output: Generate all the possible Strings after replacement.
ex. Input: ABC, A-->@,$, B-->&, C--> *
Output: Generate all the possible Strings after replacement.
ex. Input: ABC, A-->@,$, B-->&, C--> *
Output: @&*, $&*
import java.util.*;
public class PhoneStringReplacement {
public static void main(String[] args) {
PhoneStringReplacement sr = new PhoneStringReplacement();
HashMap<Character, List<Character>> map = new HashMap<Character, List<Character>>();
map.put('A', new ArrayList<Character>());
map.put('B', new ArrayList<Character>());
map.put('C', new ArrayList<Character>());
map.get('A').add('@');
map.get('A').add('$');
map.get('A').add('!');
map.get('B').add('&');
map.get('C').add('*');
List<String> res = sr.getStringReplacements("ABC", map);
for (String s : res) {
System.out.println(s);
}
}
public List<String> getStringReplacements(String str, HashMap<Character, List<Character>> map) {
List<String> res = new ArrayList<String>();
if (str == null || str.length() == 0) {
return res;
}
helper(res, str, new StringBuilder(), map, 0);
return res;
}
private void helper(List<String> res, String str, StringBuilder sb, HashMap<Character, List<Character>> map,
int pos) {
if (pos == str.length()) {
res.add(sb.toString());
return;
}
char c = str.charAt(pos);
List<Character> list = map.get(c);
for (int i = 0; i < list.size(); i++) {
char ch = list.get(i);
sb.append(ch);
helper(res, str, sb, map, pos + 1);
sb.deleteCharAt(sb.length() - 1);
}
}
}