动态编程方法或失败贪婪的案例

时间:2012-06-04 17:34:42

标签: algorithm dynamic-programming greedy

我有一个长度为1 <= |S| <= 100K (1 <= K <= 10)

的字符串

此字符串包含digits < K和问号。我想用digits < K替换这些问号,没有两个相邻的数字相等。字符串是圆形的,因此它不能是这样的:1?111?

结果字符串必须按字典顺序排列为最小字符串。

输入和输出示例

input:
K = 4
string = ?????

output:
01012

我尝试过一种贪婪的方法,但是对于一些未知的测试用例来说却失败了。我认为它需要一个dp方法,但无法弄清楚状态,纯粹的递归代码不适合及时。

dp方法的任何帮助,或者贪婪失败的棘手测试用例?

谢谢,

2 个答案:

答案 0 :(得分:2)

如果你在字符串的一端有一个数字,那么贪心算法会给你正确的答案。

如果您的字符串以问号开头和结尾,则第一个字符(0或1)有2个可能性,对两个案例运行贪婪算法并采取最佳效果。

利高指出的错误答案:

贪婪有效但你必须从第一个问号开始,这个问号就在一个已知数字之后。

答案 1 :(得分:0)

它简单的回溯imo。为什么贪婪或动态复杂化。