我想在n个查询中找到字符串中出现的字符: 例如,字符串是:“i_love_mathematics” 并且任务是找到:
的出现'我'在范围内:
1-4(a substring starting from 1st character and ending at 4th)
2-5
3-10
范围内的'_':
1-10
3-9
输出结果为:
1
0
0
2
1
类似的问题是找到字符串中出现字符的次数,但其复杂程度为O(N),但在这种情况下,如果我这样做会导致非常高的复杂性,是否有数据可以用来解决这个问题的结构吗?
答案 0 :(得分:1)
我们将在每个位置保留每个字符的出现次数,例如字符串abacaba
cursor = connection.cursor() # you know what it is for
# here getClobVal() returns whole xml. It won't work without alias I don't know why.
query = """select a.columnName.getClobVal() from tablename a"""
cursor.execute(query) #you know what it is for
result = cursor.fetchone()[0].read() # for single record
result = cursor.fetchall() # for all records
for res in result:
print res[0].read()
现在,如果我们想回答查询,我们会执行以下操作
3-5号范围内的字母'a'
我们在第5位减去位置3之前的出现次数,即[5] -a [3-1] = 3-1 = 2,在范围3到2中出现2次字母“a” 5
答案 1 :(得分:0)
搜索每个查询的范围的时间复杂度将为O(n * q)
n:字符串的长度
q:没有查询
但是有一种更好的方法可以做到这一点 您可以使用segment trees。
树构造的时间复杂度为O(N),每个查询的时间复杂度为O(log(n))
因此,对于q查询,时间复杂度将为O(q * log(n))