【问题标题】:Split string using special parameters使用特殊参数拆分字符串
【发布时间】: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
  • 当我在 20 之间有 1 时,这意味着我有一个 片段 [2,1,..., 1,0] = f 并且我将所有片段添加到片段列表中 F 并且它表示子片段的结束
  • 当我在 22 之间有 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


【解决方案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}

遍历数组。您可以在位置3 找到下一个0。因为lastType 等于0,所以你知道你在2 zeroes 之间找到了一个1s 的序列。随心所欲。

Make lastType = 0, lastPos = 3.

继续到最后。

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

【讨论】:

  • 是的@AbhishekBansal 我认为这是一种最简单的方法。我只是添加上面提到的 3 条件。
  • @HaniGoc 是的,每当您遇到 0 或 2 时,只需检查它与 lastType 给出的组合并相应地继续。
猜你喜欢
  • 1970-01-01
  • 2022-11-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多