使用特殊参数拆分字符串

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 当我在 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 放入向量中,然后使用索引遍历字符串 小心,您的结果似乎暗示我们认为字符串的开头前面是和零,并且字符串还有一个额外的零。必须在您的规范中说明。 【参考方案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 给出的组合并相应地继续。

以上是关于使用特殊参数拆分字符串的主要内容,如果未能解决你的问题,请参考以下文章

在 C# 中的两个特殊字符之间拆分分层字符串

在 Java 中拆分其数据中包含逗号和特殊字符的 csv 文件

如何使用 2 个拆分参数拆分字符串?

Pandas使用str属性获取数据列的字符串方法类split函数基于指定分隔符拆分数据列的内容为列表设置参数n控制拆分的次数设置expand参数将拆分结果列表内容转化为多列dataframe

sql中如何判断字符串中含有特殊字符

Java字符串拆分:“忽略”拆分参数[重复]