美文网首页
IOS 算法(基础篇) ----- 重复的子字符串

IOS 算法(基础篇) ----- 重复的子字符串

作者: ShawnAlex | 来源:发表于2020-08-24 14:46 被阅读0次

很久没更新算法了, 今天更新一期

如果你想知道什么题? 既然你诚心诚意的发问了, 我就大发慈悲的告诉你!

题目: 给定一个非空的字符串,判断它是否可以由它的一个子串重复多次构成。

例如:
s = abab 返回 true s = abcabc 返回 false
s = bbb 返回 true s = aa 返回 true
s = aba 返回 false

接下来我们用一种巧妙方法来解决

两个s拼接, 去掉首尾, 如果截取后的字符串还是含s, 则说明s是个重复字符串
当然 如果s的长度小于1, 直接false

为什么呢? s如果是重复字符串, 则一定有一个子串, 在s中循环出现, 至少2次(1次的话必不是重复字符串)
那么我们将两个s拼接, 则子串至少出现4次, 例如: s = abab 拼接完 abababab
删除首尾, 则对应删除2个子串, 剩下字符串至少包含2个子串并且相邻, 即s, 那么我们判断截取后的字符串是不是包含s即可
例如: 上面 abababab 去首尾 bababa 包含s, 则s是重复字符串
例如: s abc 拼接完 abcabc 去首尾 bcab 不包含s, 则s不是重复字符串

    func repeatedSubstringPattern(_ s: String) -> Bool {
        if s.count <= 1 { return false }
        var result = s + s;
        result = String(result[result.index(result.startIndex, offsetBy: 1)..<result.index(result.endIndex, offsetBy: -1)])
        return result.contains(s)

    }

题目来源:力扣(LeetCode) 感谢力扣爸爸 :)
IOS 算法合集地址

相关文章

网友评论

      本文标题:IOS 算法(基础篇) ----- 重复的子字符串

      本文链接:https://www.haomeiwen.com/subject/wpdnjktx.html