问题

该文章的最新版本已迁移至个人博客【比特飞】,单击链接 https://www.byteflying.com/archives/3945 访问。

给定一个非空的字符串,判断它是否可以由它的一个子串重复多次构成。给定的字符串只含有小写英文字母,并且长度不超过10000。

输入: "abab"

输出: True

解释: 可由子字符串 "ab" 重复两次构成。

输入: "aba"

输出: False

输入: "abcabcabcabc"

输出: True

解释: 可由子字符串 "abc" 重复四次构成。 (或者子字符串 "abcabc" 重复两次构成。)


Given a non-empty string check if it can be constructed by taking a substring of it and appending multiple copies of the substring together. You may assume the given string consists of lowercase English letters only and its length will not exceed 10000.

Input: "abab"

Output: True

Explanation: It's the substring "ab" twice.

Input: "aba"

Output: False

Input: "abcabcabcabc"

Output: True

Explanation: It's the substring "abc" four times. (And the substring "abcabc" twice.)


示例

该文章的最新版本已迁移至个人博客【比特飞】,单击链接 https://www.byteflying.com/archives/3945 访问。

public class Program {public static void Main(string[] args) {var s = "Iori's Blog";var res = RepeatedSubstringPattern(s);Console.WriteLine(res);s = "abaababaab";res = RepeatedSubstringPattern2(s);Console.WriteLine(res);Console.ReadKey();}private static bool RepeatedSubstringPattern(string s) {//LeetCode 超出内存限制,未AC//基本思路是一个指针截断字符串//指针前所有的字符串为子字符串参考计算//往后循环看每一段是否相同//如果每一段都相同,则满足题意for(var i = 0; i < s.Length / 2; i++) {var sub = s.Substring(0, i + 1);if(s.Length % sub.Length != 0) continue;var nums = s.Length / sub.Length;for(var j = 1; j < nums; j++) {if(s.Substring(j * sub.Length, sub.Length) != sub) break;if(j == nums - 1) return true;}}return false;}private static bool RepeatedSubstringPattern2(string s) {//基本思路是一个指针截断字符串//指针前所有的字符串为子字符串参考计算//以此字符串循环构建新字符//比较新构建的字符串是否和原串相同//变量 repeat 不能使用字符串,否则效率较低//LeetCode 会TLE超时无法ACvar length = s.Length;for(var i = length / 2; i >= 1; i--) {if(length % i == 0) {var repeat = new StringBuilder();for(var j = 0; j < length / i; j++) {repeat.Append(s.Substring(0, i));}if(repeat.ToString() == s) return true;}}return false;}}

以上给出2种算法实现,以下是这个案例的输出结果:

该文章的最新版本已迁移至个人博客【比特飞】,单击链接 https://www.byteflying.com/archives/3945 访问。

False
True

分析:

显而易见,以上2种算法的时间复杂度均为:  。

C#LeetCode刷题之#459-重复的子字符串(Repeated Substring Pattern)相关推荐

  1. js实现kmp算法_「leetcode」459.重复的子字符串:KMP算法还能干这个!

    不瞒你说,重复子串问题,KMP很拿手 题目459.重复的子字符串 给定一个非空的字符串,判断它是否可以由它的一个子串重复多次构成.给定的字符串只含有小写英文字母,并且长度不超过10000. 示例 1: ...

  2. 字符串专题-LeetCode:剑指 Offer 58 - II. 左旋转字符串、LeetCode 459.重复的子字符串、 代码思路和注意点

    文章目录 一.剑指 Offer 58 - II. 左旋转字符串 二.LeetCode 459.重复的子字符串 一.剑指 Offer 58 - II. 左旋转字符串 思路: 预留出n个字符空间s.res ...

  3. 代码随想录Day09:28. 实现 strStr()、459.重复的子字符串、字符串总结 、双指针回顾

    目录 Day09:28. 实现 strStr().459.重复的子字符串.字符串总结 .双指针回顾 28. 实现 strStr() (一刷只看了思想) 459.重复的子字符串 (本题一刷跳过了) 字符 ...

  4. 随想录Day9--28. 实现 strStr() , 459.重复的子字符串

    今天的两道题关键在于学习KMP算法.KMP算法运用场景在于一串字符串里面查找是否含有某个子字符串,如"abcdef"里面就含有"cdf"这么个子字符串.先把题目 ...

  5. 459. 重复的子字符串-KMP算法

    459. 重复的子字符串 给定一个非空的字符串 s ,检查是否可以通过由它的一个子串重复多次构成. 示例 1: 输入: s = "abab" 输出: true 解释: 可由子串 & ...

  6. 算法Day8|字符串专题二 剑指 Offer 58 - II. 左旋转字符串,28. 找出字符串中第一个匹配项的下标,459. 重复的子字符串

    剑指 Offer 58 - II. 左旋转字符串 解题思路: 反转区间为前n的子串 反转区间为n到末尾的子串 反转整个字符串 class Solution {public String reverse ...

  7. 402-字符串(题目:剑指Offer58-II.左旋转字符串、 28. 实现 strStr()、459.重复的子字符串)

    题目:剑指Offer58-II.左旋转字符串 class Solution {public:string reverseLeftWords(string s, int n) {string s1(s. ...

  8. 【代码随想录二刷】day9 | 28. 实现 strStr() 459.重复的子字符串

    二刷主要记录理解不一样的题 一刷地址:day9 今日题目:中等 KMP:困难 => 第一时间想到了使用KMP,但是不太会,只有用常规方法完成 实现 strStr():拼接完两个字符串s之后,取其 ...

  9. 力扣459. 重复的子字符串(KMP,JavaScript)

    如果 next[len - 1] != 0,则说明字符串有最长相同的前后缀(就是字符串里的前缀子串和后缀子串相同的最长长度). 最长相等前后缀的长度为:next[len - 1] . 数组长度为:le ...

最新文章

  1. Linux下wireshark抓包验证telnet明文传输密码
  2. windows下安装nginx
  3. sublime python插件_sublime text 3 + python配置,完整搭建及常用插件安装
  4. 针对故障场景的血液,汗液和书写自动集成测试
  5. 使用iometer测试
  6. Linux工作笔记-查看某程序安装路径及可执行文件相关链接库
  7. 如何用产品经理的思维设计移动报表
  8. linux系统信息 命令,Linux_Linux系统信息查看命令大全,系统    # uname -a # - phpStudy...
  9. 【完美】mac word2016 安装 endnote x9
  10. gitlens突然不显示了_监控画面突然没有了怎么办?监控画面不显示了?
  11. 制作简单启动型 U 盘_附制作工具下载
  12. 深入java虚拟机(圣思园)
  13. 第五章 多元函数微分学
  14. 修改CodeRunner快捷键
  15. 计算机出现假桌面怎么解决办法,win10专业版系统桌面经常假死解决办法
  16. 推荐一个数据可视化大屏幕报表开源系统
  17. HCNE复习参考(上)
  18. python自然语言分析_Python自然语言处理-分析句子结构
  19. 纯前端提示页面版本更新
  20. 《人人都是产品经理》之我也是产品经理

热门文章

  1. 【转载】cuda编程入门
  2. Ethercat解析(四)之搭建RTAI实时内核(Ubuntu12.04)
  3. C++——常用取整方法
  4. C——printf和scanf返回值问题
  5. kubernetes——pod和docker容器的关系
  6. 演练 看不见的硬币 1002
  7. photoshop cs6 安装过程 0920
  8. CSS浏览器兼容性与解决方法
  9. .net WebApi开发
  10. 快速简易的分解歌词文件