class Solution:
def longestDupSubstring(self, S: str) -> str:
power = 2**63 - 1
def rabin(mid):
chash = 0
for i in range(mid):
chash = (chash * 26 + nums[i]) % power
hashes = {chash}
position = -1
max_pow = pow(26, mid, power)
for i in range(mid, len(S)):
chash = (26*chash-nums[i-mid]*max_pow + nums[i]) % power
if chash in hashes:
position = i + 1 - mid
hashes.add(chash)
return position
low, high = 0, len(S)-1
end = 0
start = 0
nums = [ord(c)-ord('a') for c in S]
while low <= high:
mid = (low+high) // 2
position = rabin(mid)
if position == -1: # no matching strings found
high = mid - 1
else:
start = position
low = mid + 1
return S[start:start+low-1]
MAXBRIDGE Maximise the bridges | WLDRPL Wildcard Replacement |
1221. Split a String in Balanced Strings | 1002. Find Common Characters |
1602A - Two Subsequences | 1555A - PizzaForces |
1607B - Odd Grasshopper | 1084A - The Fair Nut and Elevator |
1440B - Sum of Medians | 1032A - Kitchen Utensils |
1501B - Napoleon Cake | 1584B - Coloring Rectangles |
1562B - Scenes From a Memory | 1521A - Nastia and Nearly Good Numbers |
208. Implement Trie | 1605B - Reverse Sort |
1607C - Minimum Extraction | 1604B - XOR Specia-LIS-t |
1606B - Update Files | 1598B - Groups |
1602B - Divine Array | 1594B - Special Numbers |
1614A - Divan and a Store | 2085. Count Common Words With One Occurrence |
2089. Find Target Indices After Sorting Array | 2090. K Radius Subarray Averages |
2091. Removing Minimum and Maximum From Array | 6. Zigzag Conversion |
1612B - Special Permutation | 1481. Least Number of Unique Integers after K Removals |