Unique Substrings in Wraparound String
Consider the string s to be the infinite wraparound string of “abcdefghijklmnopqrstuvwxyz”, so s will look like this: “…zabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcd…”.
Now we have another string p. Your job is to find out how many unique non-empty substrings of p are present in s. In particular, your input is the string p and you need to output the number of different non-empty substrings of p in the string s.
Note: p consists of only lowercase English letters and the size of p might be over 10000.
Example
Input: “zab”
Output: 6
Explanation: There are six substrings “z”, “a”, “b”, “za”, “ab”, “zab” of string “zab” in the string s.
Solution
class Solution:
def findSubstringInWraproundString(self, p: str) -> int:
res = {i:1 for i in p}
l = 1
for i,j in zip(p, p[1:]):
l = l+1 if (ord(j)-ord(i))%26 == 1 else 1
res[j] = max(res[j], l)
return sum(res.values())