给定一个 HashMap,其中的映射是:
a => 1
b => 2
...
...
z => 26
找出可以从该数字生成的最大字符串数。例如:
function("111") = 3
// aaa - 1,1,1
// ak - 1, 11
// ka - 11, 1
function("26") = 2
// bf - 2, 6
// z - 26
function("101") = 1
// ja - 10, 1
// note that there are no other possibilities since 0 does not map to anything
如果有人可以用 Java 提供解决方案代码,那将会很有帮助。谢谢!
最佳答案
我在一些面试中遇到过这个问题,当我用伪代码或只是在黑板上画出来回答问题时,面试官印象非常深刻。
解决方案:
这个想法是通过作为函数参数的字符串长度来获得所有可能的组合。
假设您的输入是“111”,那么可能的组合是:
- 1,1,1
- 11, 1
- 1, 11
每次我们都需要从 String 参数中取一个或两个位置,对吗? 这听起来像二进制,所以我们可以标记:
- 一个为'0'
- 二为“1”
所以我们上面的组合是这样的:
- 1,1,1 ==>> 0,0,0
- 11, 1 ==>> 1,0
- 1, 11 ==>> 0,1
通过每个二进制组合,我们可以从字符串中获取值并从 ABC 中找到我们需要的字母。如果在 1-26 范围内找不到某个值,那么它是无效的。
解决方案从计算如何通过作为参数给定的字符串长度找到可能的组合开始。
关于algorithm - 找出给定数字的最大有效字符串组合数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28182485/