[LeetCode By Go 91]459. Repeated Substring Pattern

题目

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.

Example 1:

Input: "abab"
Output: True
Explanation: It's the substring "ab" twice.

Example 2:

Input: "aba"
Output: False
Example 3:
Input: "abcabcabcabc"
Output: True
Explanation: It's the substring "abc" four times. (And the substring "abcabc" twice.)

解题思路

假设输入字符串长度为lenS, 则所求字串长度范围1 <= lenSub <= lenS/2, 并且满足

lenS % lenSub == 0

在子串范围1 <= lenSub <= lenS/2内对每个子串进行判断,

  1. 首先判断是否满足 lenS % lenSub == 0
  2. 若满足,则将输入字符串分为多个长度为lenSub的子串,如果所有子串都和第一个子串相等,则说明该子串就是要找的子串,否则不是要找的子串
  3. 如果遍历完所有的子串都不满足,则返回false

代码

func repeatedSubstringPattern(s string) bool {
    lenS := len(s)

    for i := 1; i <= lenS/2; i++ {
        if lenS % i != 0 {
            continue
        }

        var notRepeat bool 
        sub := s[:i]
        for j := i; j <= lenS - i; j = j+i {
            if s[j:j+i] != sub {
                notRepeat = true
                fmt.Printf("sub:%+v, sj:%+v\n", sub, s[j:j+i])
                break
            }
        }
        
        if !notRepeat {
            return true
        }
    }
    return false 
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 背景 一年多以前我在知乎上答了有关LeetCode的问题, 分享了一些自己做题目的经验。 张土汪:刷leetcod...
    土汪阅读 12,788评论 0 33
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,083评论 19 139
  • 前些天,夜里和女朋友聊了一个多小时的电话,从讲当天她考完英语听说到我期望她可以有天来我的小屋陪我睡,再到她将又经历...
    至此今夕阅读 474评论 5 10
  • 今天在电影院一对情侣在前排看电影 女孩靠在女孩怀里流眼泪 她说她忘不了他 女孩轻轻帮她擦去眼泪 宠溺地摸摸她的头说...
    你超有味阅读 255评论 0 0
  • 文/互联网人esir 前天写了一篇关于性格色彩的引子,接下来就详细介绍一下几种性格的优缺点,这几天的文章比较枯燥,...
    PM回忆录阅读 32,652评论 0 8