使用特殊参数拆分字符串

时间:2013-11-26 08:37:03

标签: c++ string algorithm split

我有以下字符串:

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

  • 当我在两个 0s 之间有1时,这意味着我有文件 [0,1,1,1,0] = D
  • 当我在 2 0 之间有1时,这意味着我有一个片段 [2,1,..., 1,0] = f和i将所有片段添加到片段 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 之间[ [11,15] 之间的 f3
  

注意:我们认为字符串以 0 开头,以 0 结尾   这就是为什么我们在 [0,3] [18,21]

之间的另一个文档之间有一个文档的原因

我正在努力制定这个问题,但我无法想出一个坚实的想法。请告诉我是否清楚。我可以使用什么算法来帮助解决这个问题,我可以使用像树一样的特定数据结构......

谢谢你, 哈尼。

1 个答案:

答案 0 :(得分:1)

如果你的字符串是:

1,1,1,0,1,1,2,1,1,1,1,2,1,1,1,0,1,1,0,1,1,1

初始化lastPos = 0, lastType = 0 {lastType = 0 for 0 and 2 for 2}

遍历阵列。您会在0位置找到下一个3。由于lastType等于0,因此您知道在1s之间找到了2 zeroes的序列。做任何事。

Make lastType = 0, lastPos = 3.

继续直到最后。

Order of time complexity: O(n)
Order of space complexity: O(1)