我需要一些帮助。我有一个程序将元素存储在字符串中,如下所示:
"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
任何帮助将不胜感激。
让我们探索一下您正在尝试用更简单的任务做什么。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 等。
祝你好运!