我们可以先忽略他奇奇怪怪的定义,考虑一个数字序列共有多少个连续子串。
比如[0,1,2,5,6]
那么应该是"0","1","2","5","6","01","12","56","012"。
观察很容易得出,如果分类为以某个数字结尾的连续子串个数,那么
"2"==>3;
"1"==>2;
"0"==>1;
"5"==>1;
"6"==>2;
很显然就是需要在遍历的过程中计算出前方有多少个数字是连着的,然后将这个连续值取到最大。在判断有序的过程中其实就已经是去重了。
这样再套上连续的定义,就可以写出:
class Solution:
def findSubstringInWraproundString(self, p: str) -> int:
if len(p)<=1:
return len(p)
d={}
w=1
for i in range(len(p)):
if i==0:
w=1
else:
x=ord(p[i])-ord(p[i-1])
if x==1 or x==-25:
w+=1
else:
w=1
d[p[i]]=max(d.get(p[i],0),w)
return sum(d.values())