zoukankan      html  css  js  c++  java
  • 1227. 重复的子串模式

    1227. 重复的子串模式

    中文English

    给你一个非空字符串,判断它能否通过重复它的某一个子串若干次(两次及以上)得到。字符串由小写字母组成,并且它的长度不会超过10000。

    样例

    样例1:

    输入:"abab"
    
    输出:True
    
    说明:可以由它的子串"ab"重复两次得到。
    

    样例2:

    输入:"aba"
    
    输出:False
    

    样例3:

    输入:"abcabcabcabc"
    
    输出:True
    
    说明:可以由它的子串"abc"重复四次得到(同时也可以是"abcabc"重复两次)。
    class Solution:
        """
        @param s: a string
        @return: return a boolean
        """
        '''
        大致思路:
        1.初始化值a = s[:len(s)//2],while true,内层循环i=2,if i*a == s,返回True,否则返回False
        '''
        def repeatedSubstringPattern(self,s):
            a,l = s[:len(s)//2],len(s[:len(s)//2])+1
        
            while True:
                a = a[:l]
                if len(a) == 0:
                    return False
                
                time = len(s)//len(a)
                if time >= 2:
                    for i in range(1,time+1):
                        if i*a == s:
                            return True
                l = l-1
            return False
    第二种方式:O(n)时间复杂度:

    class Solution:
        '''
        大致思路:
        1.while True,初始化l = len(s)//2,如果len(s) % l == 0,a=s[:l],l -= 1判断(len(s) // l *a) * a == s,返回true,最终l如果等于0的话,则返回False
        '''
        def  repeatedSubstringPattern(self,s):
            l = len(s)//2 
            while True:
                if l == 0:
                    return False
                a = s[:l]
                if len(s) % l == 0:
                    b = len(s) // l
                    if b*a == s:
                        return True
                l -= 1
     
  • 相关阅读:
    对之前IoT项目的完善
    利用 esp8266 搭建简单物联网项目
    IOT(esp8266)
    ---分割线---
    百度云下载工具--雷鸟下载
    Win10安装Ubuntu子系统
    安装Ubuntu虚拟机
    搭建微信公众号后台(二)
    手把手教你基于CentOS8搭建微信订阅号后台服务(一)
    如何在PHP5中通过PDO连接SQLite3数据库
  • 原文地址:https://www.cnblogs.com/yunxintryyoubest/p/12731755.html
Copyright © 2011-2022 走看看