【leetcode前500】467.环绕字符串中的唯一子串

我们可以先忽略他奇奇怪怪的定义,考虑一个数字序列共有多少个连续子串。

比如[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())  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值