We use cookies to ensure you have the best browsing experience on our website. Please read our cookie policy for more information about how we use cookies.
def ashtonString(s, k):
kv = k - 1
N = len(s)
sr = [[0 for _ in range(N)] for __ in range(17)]
sr[0] = [ord(c)-97 for c in s]
L = [0]*N
cnt = 1
kf = lambda x: x[0]*(N+1) + x[1]
for i in range(1, 17):
for j in range(N):
L[j] = (sr[i-1][j], sr[i-1][j+cnt] if j+cnt < N else -1, j)
L.sort(key=kf)
sr[i][L[0][2]] = 0
cr = 0
for j in range(1, N):
if L[j-1][0] != L[j][0] or L[j-1][1] != L[j][1]:
cr += 1
sr[i][L[j][2]] = cr
cnt *= 2
if cnt >= N:
break
sa = [l[2] for l in L]
rank = [0]*N
lcp = [0]*N
for i in range(N):
rank[sa[i]] = i
k = 0
for i in range(N):
if rank[i] == N-1:
k = 0
continue
j = sa[rank[i] + 1]
while j + k < N and i + k < N and s[i+k] == s[j+k]:
k += 1
lcp[rank[i]] = k
if k > 0:
k -= 1
numprev = 0
tri = lambda x: ((x+1)*x)>>1
print(sa)
print(lcp)
for i in range(N):
mylen = N - sa[i]
tt = tri(mylen) - tri(numprev)
if kv < tt:
for j in range(1 + numprev, 1 + mylen):
if kv < j:
return s[sa[i]+kv]
kv -= j
kv -= tt
numprev = lcp[i]
return ''
Cookie support is required to access HackerRank
Seems like cookies are disabled on this browser, please enable them to open this website
Ashton and String
You are viewing a single comment's thread. Return to all comments →
solution in python it passes all test cases
def ashtonString(s, k): kv = k - 1 N = len(s) sr = [[0 for _ in range(N)] for __ in range(17)] sr[0] = [ord(c)-97 for c in s]