使用java简单的字符串解码

时间:2015-12-09 06:47:55

标签: java

考虑以下编码方案A-> 1,B - > 2,Z-> 26.给定使用此方案的编码(包含最多1000个数字的字符串),找到可能的解码数。输出应返回包含解码数的字符串。 注意:只需填写函数编码

输入格式

单行String

输出格式

单行String

示例输入

121

示例输出

3

解释

输入" 121"的可能解码是ABA,AU,LA。

示例输入#2: 1201 样本输出#2: 3 可能的输入解码" 1201"是ATA,AT,TA

1 个答案:

答案 0 :(得分:0)

static Map<String, String> map = new HashMap<>();

static {
    for (int i = 1; i < 26; ++i)
        map.put(Integer.toString(i), Character.toString((char)('A' + i - 1)));
}

static void decode(String decoded, String encoded, List<String> result) {
    int len = encoded.length();
    if (len == 0)
        result.add(decoded);
    else
        for (int i = 1, max = Math.min(2, len); i <= max; ++i) {
            String e = map.get(encoded.substring(0, i));
            if (e != null)
                decode(decoded + e, encoded.substring(i), result);
        }
}

public static List<String> decode(String encoded) {
    List<String> result = new ArrayList<>();
    decode("", encoded, result);
    return result;
}

@Test
public void testDecode() {
    System.out.println(decode("121"));
    System.out.println(decode("1201"));
}

结果是:

[ABA, AU, LA]
[ATA]