给定一些字符串S,此代码将计算字符串S的所有可能子串的出现次数。
#count[i]=no of different substrings in the string that occurs exactly i times
count=[0]*(100001)
a=input()
dic={}
n=len(a)
for i in range(n):
temp=""
for j in range(i,n,1):
temp+=a[j]
if temp in dic:
dic[temp]+=1
else:
dic[temp]=1
for k,v in dic.items():
count[v]+=1
例如,对于字符串“ababa”,数组将为:
我有兴趣知道我的代码的运行时间
答案 0 :(得分:0)
您的代码基本上有两部分需要单独考虑:
对于1。有两个循环需要考虑。 i循环将运行n
次,j循环每次运行n-i
次。
这意味着j循环将第一次运行n
次,第二次运行n-1
次,依此类推,直到i = n-1
运行一次为止。因此,该块的总运行时间为n(n + 1)/ 2,即O(n ^ 2)。
(注意:我假设字典访问需要恒定时间,大多数情况下都是如此)。
For 2。只有一个循环需要考虑哪些循环存在多少次。对于长度为n的字符串,唯一子串的最大数量也是n(n + 1)/ 2,也是O(n ^ 2)。
因此,运行时间为O(n ^ 2)。对于n = 10e5,操作次数为~10e10,大约需要10秒,使用10e9操作需要1秒的标准假设。