I have an input abcde
. I’m trying to output something like this:
a ab abc abcd abcde b bc bcd bcde c cd cde d de e
I can’t make a code which is without nested loops. My question is what is the solution of this problem with O(n) time complexity?
My code is given below:
s = "abcde" for i in range(len(s)): for x in range(i, len(s) + 1): a = s[i:x] if a != "": print(a)
Advertisement
Answer
Lets do this without a nested loop!
This a game with random
library, but the execution time is similar to your code.
from random import randint list1=[] str1='abcde' while len(list1)!=int(((len(str1)+1)*len(str1))//2): i=randint(0,len(str1)) j=randint(0,len(str1)) i,j=max(i,j),min(i,j) if i!=j: a=str1[j:i] if a not in list1: list1.append(a) print(a)
if the string, str1 = 'abcdef'
, it prints:
de abcdef cdef abc ef d c abcd b abcde def bcde f bcdef a bcd cd e ab cde bc
Now if you want your data in the order you specified, use sort
:
list1.sort()