```
class Solution(object):
def findSubstringInWraproundString(self, p):
"""
:type p: str
:rtype: int
"""
# lowercase string
s = "abcdefghijklmnopqrstuvwxyz"
i,count = 0 ,0 # i for current p index , count for total combination
# max length combination with starting char
# a:10 mean start with a and all under which length is 10 is counted
countlen = { e:0 for e in s }
# lindex = it's index of s of prev char in p
# cindex = it's index of s of current char in p
# i = current index in p
lindex,cindex,i,lenp = None,None,0 ,len(p)
c_start_at = None # continual subsequence start at
while i < lenp:
c = p[i] # c = current char
cindex = s.index(c) # cindex = c'index in s
# start new subsequence if just start or current char is not next of prev in s
if lindex is None or (lindex+1)%26 != cindex%26:
c_start_at = i
if countlen.get(p[i],0) == 0:
count += 1
countlen[p[i]]=1
else: # count all subsequence start between c_start_at and i-1,and end with i , except length is less than countlen
for j in range(c_start_at,i+1):
if countlen.get(p[j],0) >= i-j+1:
break
count += 1
countlen[p[j]] = i-j+1 # current max length of p[j]
lindex = cindex
i+=1
return count
```