如何找到唯一的子字符串

问题描述 投票:0回答:1

给定一个二进制字符串,如何遍历 str 来查找唯一的子字符串。我想将这些子字符串作为值添加到字典中。键是索引,从1开始。子串应该按第一个和最短的子串划分为子串。我相信逻辑会是这样的:

  1. 查看第一位,如果它在字典中没有作为唯一子字符串,则添加它。第一位总是如此。
  2. 现在看第二位。如果它在字典中不作为唯一子字符串,请添加它。如果是,请一起查看第二位和第三位。这个新字符串是否在唯一子字符串的字典中?如果没有,请添加。如果是,请一起查看第二、第三和第四位。等等。

例如,给定字符串

"1010100"

  1. “1”不在字典中,添加它。
    {1: '1'}
  2. “0”不在字典中,添加它。
    {1: '1', 2: '0'}
  3. “1”在字典中,因此添加下一位。字典中没有“10”,请添加它。
    {1: '1', 2: '0', 3: '10'}
  4. “1”在字典中,因此添加下一位。 “10”在字典中,因此添加下一位。字典中没有“100”,请添加它。
    {1: '1', 2: '0', 3: '10', 4: '100'}

这就是字符串的“划分”方式:|1|0|10|100|

此外,不需要考虑

"00"
是给定二进制字符串的情况。

python algorithm compression encode
1个回答
0
投票

“...给定一个二进制字符串,如何遍历str找到唯一的子字符串。我想将这些子字符串作为值添加到字典中。键是索引,从1开始。子字符串应该是按第一个和最短的子串分为子串。...”

这是一个例子。

利用双for循环来解析s子字符串值的开始和结束索引。

判断该值是否在字典内,d
我正在使用 itertools.chain function 来展平值列表。

import itertools as it
n, t = len(s := '1010100'), ''
d = {}
for i in range(n):
    for j in range(i, n):
        t = s[i:j + 1]
        if not len(d.values()) or t not in list(it.chain(*d.values())):
            d.setdefault(i + 1, []).append(t)

输出

{1: ['1', '10', '101', '1010', '10101', '101010', '1010100'],
 2: ['0', '01', '010', '0101', '01010', '010100'],
 3: ['10100'],
 4: ['0100'],
 5: ['100'],
 6: ['00']}
© www.soinside.com 2019 - 2024. All rights reserved.