中级农民
- 积分
- 155
- 大米
- 颗
- 鳄梨
- 个
- 水井
- 尺
- 蓝莓
- 颗
- 萝卜
- 根
- 小米
- 粒
- 学分
- 个
- 注册时间
- 2014-4-17
- 最后登录
- 1970-1-1
|
follow up, 可以加一个map,来记录,- public class CapitalAndLowercaseStringsII {
- public static void main(String[] args) {
- Set<Character> set = new HashSet<Character>();
- set.add('a');
- set.add('p');
- List<String> res = generataAllStringFollowUp("airpalne", set);
- for (String s : res) {
- System.out.println(s);
- }
- }
- public static List<String> generataAllStringFollowUp(String input,
- Set<Character> set) {
- List<String> res = new ArrayList<String>();
- if (input == null || input.length() == 0) {
- return res;
- }
- HashMap<Character, Character> map = new HashMap<Character, Character>();
- helper(res, new StringBuilder(), set, input, 0, map);
- return res;
- }
- public static void helper(List<String> res, StringBuilder sb,
- Set<Character> set, String input, int pos,
- HashMap<Character, Character> map) {
- if (pos == input.length()) {
- res.add(sb.toString());
- return;
- }
- char c = input.charAt(pos);
- if (!set.contains(c)) {
- sb.append(c);
- helper(res, sb, set, input, pos + 1, map);
- sb.deleteCharAt(sb.length() - 1);
- } else {
- if (map.containsKey(c)) {
- char ch = map.get(c);
- sb.append(ch);
- helper(res, sb, set, input, pos + 1, map);
- sb.deleteCharAt(sb.length() - 1);
- } else {
- sb.append(c);
- map.put(c, c);
- helper(res, sb, set, input, pos + 1, map);
- sb.deleteCharAt(sb.length() - 1);
- map.remove(c);
- char capital = (char) (c - 'a' + 'A');
- map.put(c, capital);
- sb.append(capital);
- helper(res, sb, set, input, pos + 1, map);
- sb.deleteCharAt(sb.length() - 1);
- map.remove(c);
- }
- }
- }
- }
复制代码 |
|