【发布时间】:2013-11-26 08:37:03
【问题描述】:
我有以下字符串:
1,1,1,0,1,1,2,1,1,1,1,2,1,1,1,0,1,1,0,1,1,1,
0-->rupture
2-->continuity
- 当我在两个 0 之间有 1 时,这意味着我有一个 文档 [0,1,1,1,0] = D
- 当我在 2 和 0 之间有 1 时,这意味着我有一个 片段 [2,1,..., 1,0] = f 并且我将所有片段添加到片段列表中 F 并且它表示子片段的结束
- 当我在 2 和 2 之间有 1 时,这意味着我还有一个 片段 [2,1,... ,1,2] = f
最后我必须有一个解决方案:
- 3 个文档 D1,D2,D3 位于索引 [0,3] 之间, [15,18]、[18,21]
- [3,15] 之间的片段 F 包含 3 个子片段,f1 介于 [3,6] 之间,f2 介于 [ 6,11] 和 f3 在 [11,15] 之间。
注意:我们认为字符串以 0 开头并以 0 结尾 这就是为什么我们在 [0,3] 之间有一个文档,而在 [18,21]
之间有另一个文档
我正在尝试制定这个问题,但我想不出一个可靠的想法。请告诉我是否清楚。以及我可以使用什么算法来帮助解决这个问题,我可以使用像树这样的特定数据结构...
谢谢, 哈尼族。
【问题讨论】:
-
只需用纸笔设计一个状态机,它能够根据您描述的三个规则处理数字序列。
-
@FrerichRaabe 你能说我只能通过状态机来解决吗?我不能使用其他数据结构?
-
您可以通过简单地遍历列表一次并跟踪 0 或 2 的最后位置及其类型来做到这一点。当你遇到另一个 0 或 2 时,那么做任何事情并继续。
-
@AbhishekBansal 我在想什么,因为我有 0 和 2 的索引,我可以使用它们。但是=也许这不是一个好方法。我可以从提取 0 的内切开始,然后将它们放入向量中,然后将 2 放入向量中,然后使用索引遍历字符串
-
小心,您的结果似乎暗示我们认为字符串的开头前面是和零,并且字符串还有一个额外的零。必须在您的规范中说明。
标签: c++ string algorithm split