使用特殊参数拆分字符串
Posted
技术标签:
【中文标题】使用特殊参数拆分字符串【英文标题】: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 当我在 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 放入向量中,然后使用索引遍历字符串 小心,您的结果似乎暗示我们认为字符串的开头前面是和零,并且字符串还有一个额外的零。必须在您的规范中说明。 【参考方案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 给出的组合并相应地继续。以上是关于使用特殊参数拆分字符串的主要内容,如果未能解决你的问题,请参考以下文章
在 Java 中拆分其数据中包含逗号和特殊字符的 csv 文件
Pandas使用str属性获取数据列的字符串方法类split函数基于指定分隔符拆分数据列的内容为列表设置参数n控制拆分的次数设置expand参数将拆分结果列表内容转化为多列dataframe