Repeated String Match

Repeated String Match

Question:

请添加图片描述

思路

这个题的思路有一个trick 就是 额外加两次copy那里需要特别理解一下.
首先我们知道, 如果想构建出b是a 的substring, 那么至少a.length >= b.length.
然后呢, 我们就首先会add b.length/a.length + 1 个 copy.
因为code除法都是向下取整, 所以 + 1可以保证a.length 至少比 b.length 长.

至于为什么要再加一次copy 呢。
是因为, 如果说B[0] 是 A[A.length -1]的话, 那么A.length 刚刚比 B长一点儿, 是不够用的. 不能保证B是substring of A 并且还能检测到。
所以我们要额外加一次copy,这样就能保证不漏.
举个例子:

Suppose A = aaaaab and B = ba
Now S = A (1 time) is already >= B.size()
So we do not need to append S with A , we will directly check if “ba” is in the S or not which is not …
So we will append S one last time with A , Now S becomes , S = aaaaabaaaaab , again searching for B in the S will get you with solution …

class Solution {
    public int repeatedStringMatch(String a, String b) {
        String ans = a;
        for(int i = 0;i < b.length()/a.length() + 2; ++i, ans += a){
            if(ans.contains(b)) {
                return i+1;
            }
        }
        return -1;
        
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值