首页 > 其他分享 >Leetcode 459——重复的子字符串

Leetcode 459——重复的子字符串

时间:2023-08-23 09:22:24浏览次数:50  
标签:子串 459 示例 重复 字符串 true Leetcode 掐头去尾

给定一个非空的字符串 s ,检查是否可以通过由它的一个子串重复多次构成。

示例 1:

输入: s = "abab"
输出: true
解释: 可由子串 "ab" 重复两次构成。

示例 2:

输入: s = "aba"
输出: false

示例 3:

输入: s = "abcabcabcabc"
输出: true
解释: 可由子串 "abc" 重复四次构成。 (或子串 "abcabc" 重复两次构成。)

提示:

  • 1 <= s.length <= 10e4
  • s 由小写英文字母组成

第一次看到这个题,我下意识的思路是利用哈希表去统计字符串中每个字符出现的次数,然后通过遍历,若是每两个字符次数的最小公因数都相等且不等于1,那么该字符串就可以由子串重复多次构成,显然这种方法思路时间复杂度很高,于是我通过逛评论区,看到了一种更加新奇的思路。

假设母串S是由子串s重复N次而成, 则 S+S则有子串s重复2N次, 那么现在有: S=Ns, S+S=2Ns, 其中N>=2。 如果条件成立, S+S=2Ns, 掐头去尾破坏2个s,S+S中还包含2*(N-1)s, 又因为N>=2, 因此S在掐头去尾后的2S中必然出现一次以上,掐头去尾可以通过通过截取第一个字符和最后一个字符去破坏头和尾的字符串。

class Solution {
    public boolean repeatedSubstringPattern(String s) {
        String str = (s + s).substring(1,s.length()*2-1);
        if(str.contains(s))
        {
            return true;
        }
        return false;
    }
}

实现思路的代码编写能力固然重要,但是一个好的思路可以使得效率事半功倍。

标签:子串,459,示例,重复,字符串,true,Leetcode,掐头去尾
From: https://www.cnblogs.com/Yuansj0206/p/17650189.html

相关文章

  • [LeetCode][72]edit-distance
    ContentGiventwostringsword1andword2,returntheminimumnumberofoperationsrequiredtoconvertword1toword2.Youhavethefollowingthreeoperationspermittedonaword:InsertacharacterDeleteacharacterReplaceacharacter Example1:In......
  • Leetcode 349.两个数组的交集(Intersection of two arrays)
    题目链接......
  • javascript判断字符串中是否包含某个字符串
    使用Math与RegExp结合Let gameName="AFGA捕鱼";if(gameName.match(RegExp("捕鱼"))){      letfishing=obj.data.gameData.fishing;      console.log(fishing);    }参考地址:https://www.php.cn/faq/473880.html......
  • Leetcode 849. 到最近的人的最大距离
    题目描述给你一个数组seats表示一排座位,其中seats[i]=1代表有人坐在第i个座位上,seats[i]=0代表座位i上是空的(下标从0开始)。至少有一个空座位,且至少有一人已经坐在座位上。亚历克斯希望坐在一个能够使他与离他最近的人之间的距离达到最大化的座位上。返回他到离......
  • LeetCode.钥匙和房间
    1.代码:有 n 个房间,房间按从 0 到 n-1 编号。最初,除 0 号房间外的其余所有房间都被锁住。你的目标是进入所有的房间。然而,你不能在没有获得钥匙的时候进入锁住的房间。当你进入一个房间,你可能会在里面找到一套不同的钥匙,每把钥匙上都有对应的房间号,即表示钥匙可以打开的房......
  • 5.3 汇编语言:字符串操作指令
    本章将深入研究字符串操作指令,这些指令在汇编语言中具有重要作用,用于处理字符串数据。我们将重点介绍几个关键的字符串操作指令,并详细解释它们的功能和用法。通过清晰的操作示例和代码解析,读者将了解如何使用这些指令进行字符串比较、复制、填充等常见操作。我们还将探讨不同指令之......
  • Leetcode 两个队列实现栈 swift
    queue1 是最后生成的栈queue2是临时队列,把新进来的先放进去,再把queue1里的数据从头到尾读进去,然后互换classMyStack{varqueue1:[Int]=[]varqueue2:[Int]=[]init(){}funcpush(_x:Int){queue2.append(x)whil......
  • 5.3 汇编语言:字符串操作指令
    本章将深入研究字符串操作指令,这些指令在汇编语言中具有重要作用,用于处理字符串数据。我们将重点介绍几个关键的字符串操作指令,并详细解释它们的功能和用法。通过清晰的操作示例和代码解析,读者将了解如何使用这些指令进行字符串比较、复制、填充等常见操作。我们还将探讨不同指令......
  • python 使用re模块,配合正则表达式来查找字符串的想要的字符串
    一,首先:我们现了解一下python中正则表达式的基本规则有那些?1,字符串"\d"匹配0~9之间的一个数值eg:'dsas212b321321'使用r'\d'结果:(它会一次匹配一个数字依次查找)212321321  2,字符"+"重复前面一个匹配字符一次或者多次eg:'dsas212b321321'方式1:使用r'\d+'结果:(......
  • C#,连接数据库字符串汇总
     //-------------------SQLServer连接数据库字符串-------------20161216-----------------------------DataSource=服务器地址;InitialCatalog=数据库名;UserID=sa;Password=sa //-------------------ACCESS连接数据库字符串----------20161216--------------------......