Phone String Replacement

Input: 一个字符串, 每个字符都有几个对应的replacement. 
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);
		}
	}
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值