-4

我需要一些帮助。我有一个程序将元素存储在字符串中,如下所示:

"D,C,D,C,D,C,C,C,D,C,C,D,C"

我想压缩这些元素并将它们打印到屏幕上,如下所示:

(DC)3C(CDC)2

其中 (DC)3 表示程序已压缩字符串“DCDCDC”,这意味着 DC 将重复 3 次,并且知道 () 内的每组元素最多只能有 3 个元素。

到目前为止,我只有与相同类型的紧凑元素

"DDDCDCC"

进入:

D3CDC2

任何帮助将不胜感激。

4

1 回答 1

2

让我们探索一下您正在尝试用更简单的任务做什么。DC折叠以下CDC字符串的任何实例:

[D,C,D,C,D,C,C,C,D,C,C,D,C]

由于DC出现在 中CDC,我们应该先做较长的字符串。从第一个字符开始,看看你在哪里找到模式的CDC开始:

DCDCDCCCDCCDC
 ^     ^  ^

折叠这些结果中的每一个:

D(CDCx1)DCC(CDCx2)

现在,检查DC

D(CDCx1)(DCx1)C(CDCx2)

哦哦!这没有导致您的示例输出!如果我们按照其他顺序进行搜索呢?标记每个DC结果:

DCDCDCCCDCCDC
^ ^ ^   ^  ^

折叠成:

(DCx3)CC(DCx1)C(DCx1)

呵呵,这也不会导致您的输出。

所以,如果我们尝试不同的策略会发生这种情况......让我们从头开始,并尽快贪婪地匹配任何模式:

DCDCDCCCDCCDC
^

我们可以匹配CDC吗?不,DC怎么样?是的!

(DCx1)DCDCCCDCCDC
      ^

在第一次更换后开始,我们进行相同的测试。CDC?不,直流?是的!

(DCx2)DCCCDCCDC
      ^

再一次:CDC?不,直流?是的!

(DCx3)CCDCCDC
      ^

CDC?不,直流?不,跳到下一个字符。

(DCx3)CCDCCDC
       ^

CDC?是的!

(DCx3)C(CDCx1)CDC
              ^

CDC?是的!

(DCx3)C(CDCx2)
              ^

我们已经到了文本的结尾,更重要的是,输出与预期值匹配。因此,要将其扩展到完整的算法,您需要完整的可能子集列表:CCC、CCD、CDC、CDD、DCC、DCD、DDC、DDD、CC、CD 等。

祝你好运!

于 2013-04-26T17:58:08.083 回答