给定一个二进制字符串,如何遍历 str 来查找唯一的子字符串。我想将这些子字符串作为值添加到字典中。键是索引,从1开始。子串应该按第一个和最短的子串划分为子串。我相信逻辑会是这样的:
例如,给定字符串
"1010100"
{1: '1'}
{1: '1', 2: '0'}
{1: '1', 2: '0', 3: '10'}
{1: '1', 2: '0', 3: '10', 4: '100'}
这就是字符串的“划分”方式:|1|0|10|100|
此外,不需要考虑
"00"
是给定二进制字符串的情况。
“...给定一个二进制字符串,如何遍历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']}