【发布时间】:2014-01-17 02:45:43
【问题描述】:
我想在字符串变量中导出位流模式。假设我们的比特流类似于 bitStream="111000001010000100001111"。我正在寻找一种 Java 代码,以将所有连续的“0”或“1”保存在一个数组元素中的方式将此位流保存在特定数组(假设为 bitArray)中。在此示例中,输出将是这样的:
bitArray[0]="111"
bitArray[1]="00000"
bitArray[2]="1"
bitArray[3]="0"
bitArray[4]="1"
bitArray[5]="0000"
bitArray[6]="1"
bitArray[7]="0000"
bitArray[8]="1111"
我想使用 bitArray 来计算存储在每个连续流中的位数。例如,在这种情况下,最终输出将是“3,5,1,1,1,4,1,4,4”。我发现可能“拆分”方法可以为我解决这个问题。但我不知道什么分割模式会为我做这件事,如果我使用bitStream.split("1+"),它会在连续的“1”模式上分割,如果我使用bitStream.split("0+"),它会在连续的“0”的基础上做到这一点,但它会如何基于两者?
Mathew 提出了这个解决方案,它很有效:
var wholeString = "111000001010000100001111";
wholeString = wholeString.replace('10', '1,0');
wholeString = wholeString.replace('01', '0,1');
stringSplit = wholeString.split(',');
我的问题是“这个解决方案是最有效的吗?”
【问题讨论】:
-
您的结果是否必须有序?例如,
bitArray[1]是否可以包含111和bitArray[0]是否包含00000? -
是的,与出场顺序相同。
-
关于效率的问题,我认为用小于 O(n) 的复杂度来做是不可能的,因为你必须以某种方式至少评估所有字符串
-
查看我的答案,了解我对列出的 4 个答案进行的小型性能测试的结果。
标签: java string methods pattern-matching