在python中所有可能的子串集合中找出给定位置给定字符串的子串的程序
假设我们提供了 n 个字符串;str1, str2, str3, ....., strn. 现在,让我们假设 substri 是一个包含 stri 的所有子串的集合。所有 substr 集合的并集是 substr_union。我们现在有 q 个查询,我们必须找到集合 substr_union 的第 q 个元素。集合 substr_union 按字典顺序排序,索引从 1 开始。
因此,如果输入类似于字符串列表是 = ['pqr', 'pqt'],查询是 = [4, 7, 9],那么输出将是 ['pqt', 'qt', 't' ]
第一个字符串的子串是 subs_str_1 = {p, pq, pqr, q, qr, r }, sub_str_2 = {p, pq, pqt, q, qt, t}。
这两个集合的并集或 substr_union 是 {p, pq, pqr, pqt, q, qr, qt, r, t}。
所以索引 4、7 和 9 处的项目分别是 'pqt'、qt' 和 't'。
示例
让我们看看以下实现以获得更好的理解 -
def lng_i(suff, lng, i):d = zip(suff,lng)
lo = hi = 0
for suf, lng in d:
if lng is None:
lng = 0
hi += len(suf) - lng
if hi - 1 == i:
return suf
elif hi - 1 > i:
for p, q in enumerate(list(range(lng, len(suf)))):
if lo + p == i:
return suf[:q+1]
lo = hi
return False
def hlp_ii(str1,str2):
ub = min(len(str1), len(str2))
cnt = 0
for i in range(ub):
if str1[i] == str2[i]:
cnt += 1
else:
return cnt
return cnt
def solve(strings,q_list):
t_dict = {}
suff = []
lng = []
for str in strings:
for i in range(len(str)):
value = str[i:]
if value not in t_dict:
t_dict[value] = 1
suff.append(value)
suff.sort()
suff_len = len(suff)
for i in range(suff_len):
if i == 0:
lng.append(None)
else:
lng.append(hlp_ii(suff[i-1], suff[i]))
res = []
for q in q_list:
(res.append(lng_i(suff, lng, q-1)))
return res
print(solve(['pqr', 'pqt'], [4, 7, 9]))
输入
['pqr', 'pqt'], [4, 7, 9]输出结果
['pqt', 'qt', 't']
以上是 在python中所有可能的子串集合中找出给定位置给定字符串的子串的程序 的全部内容, 来源链接: utcz.com/z/327382.html