码迷,mamicode.com
首页 > 其他好文 > 详细

每天一道leetcode 统计重复个数(循环节)

时间:2020-04-26 22:35:31      阅读:117      评论:0      收藏:0      [点我收藏+]

标签:ann   图片   示例   直接   problems   没有   int   小数   开始   

统计重复个数(循环节)

466. 统计重复个数

难度困难

由 n 个连接的字符串 s 组成字符串 S,记作 S = [s,n]。例如,["abc",3]=“abcabcabc”。

如果我们可以从 s2 中删除某些字符使其变为 s1,则称字符串 s1 可以从字符串 s2 获得。例如,根据定义,"abc" 可以从 “abdbec” 获得,但不能从 “acbbe” 获得。

现在给你两个非空字符串 s1 和 s2(每个最多 100 个字符长)和两个整数 0 ≤ n1 ≤ 106 和 1 ≤ n2 ≤ 106。现在考虑字符串 S1 和 S2,其中 S1=[s1,n1]S2=[s2,n2]

请你找出一个可以满足使[S2,M]S1 获得的最大整数 M 。

示例:

输入:
s1 ="acb",n1 = 4
s2 ="ab",n2 = 2

返回:
2

答:

class Solution:
    def getMaxRepetitions(self, s1: str, n1: int, s2: str, n2: int) :
        diction=dict()
        s1cnt,s2cnt,n=0,0,0
        while True: #寻找循环节node
            s1cnt += 1
            for i in s1:
                if i==s2[n]:
                    n+=1
                    if n==len(s2):
                        n,s2cnt=0,s2cnt+1
            if n in diction:
                s1_first,s2_first=diction[n]
                s1_node,s2_node=s1cnt,s2cnt
                break
            else:
                diction[n]=(s1cnt,s2cnt)
        #每几个s1包含几个s2
        each=(s1cnt-s1_first,s2cnt-s2_first)
        #S1中s2的数目
        cnt=s2_first+(n1-s1_first)//each[0]*each[1]
        #S1中剩余的匹配
        re=(n1-s1_first)%each[0]#求出剩下的s1的个数,再去暴力匹配s2
        for i in range(re):
            for i in s1:
                if i == s2[n]:
                    n += 1
                    if n == len(s2):
                        n, cnt = 0, cnt + 1
        return cnt//n2

解析做法:

emm,这题有点难搞,刚开始是直接暴力,直接超时,思考后选择匹配出S2的s1个数,但没有用循环节,这种复杂因素很多并且我没有处理好。

后来无奈看了解析,知道了使用循环节(类似小数点无先循环,不算刚开头无序部分)

技术图片

由循环计算得到没几个s1就可以得到一个s2,利用n1计算结果,还没结束哦,S1剩下的s1虽然不能构造一个循环节但是仍然有机会匹配出s2(s2绝大多数不等于循环节),所以利用剩下的s1个数暴力匹配s2

注意:

  • 最终结果要除于n2
  • j计算循环节个数和剩余s1过程中要处理好开头不是循环节的“无序”部分,就是这部分

技术图片

每天一道leetcode 统计重复个数(循环节)

标签:ann   图片   示例   直接   problems   没有   int   小数   开始   

原文地址:https://www.cnblogs.com/rower/p/12782806.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!