686. Repeated String Match

686. Repeated String Match

Easy

Given two strings A and B, find the minimum number of times A has to be repeated such that B is a substring of it. If no such solution, return -1.

For example, with A = “abcd” and B = “cdabcdab”.

Return 3, because by repeating A three times (“abcdabcdabcd”), B is a substring of it; and B is not a substring of A repeated two times (“abcdabcd”).

判断当 A 重复一定次数之后,B 能否成为其子串,如果是,返回重复次数,不是返回 -1。

既然 B 要是 A 的子串,那么 A 的长度一定的 大于等于 B,并且当 A 长度已经大于等于 B 的长度,还没找到,那么再怎么重复,都是不可能找到的。

  1. 先让 A 重复次数 大于等于 B 的长度
  2. 再判断是否找到,找到则返回,如果此时还不包含,那么再加一次A
  3. 再判断是否包含,并返回结果

Java

class Solution {
    public int repeatedStringMatch(String A, String B) {
        int len_a = A.length();
        int len_b = B.length();
        // StringBuffer res = new StringBuffer(A);
        String res = A;
        int cnt = 1;
        while(res.length() < len_b){
            res += A;
            cnt += 1;
        }
        if(res.contains(B)){
            return cnt;
        }
        res += A;
        if(res.contains(B)){
            return cnt+1;
        }
        return -1;
        // while(res.indexOf(B) == -1){
        //     if(res.length() - len_a > len_b){
        //         return -1;
        //     }
        //     res.append(A);
        //     cnt += 1;
        // }
        // return cnt;
    }
}

Python

class Solution:
    def repeatedStringMatch(self, A: str, B: str) -> int:
        len_a, len_b = len(A), len(B)
        res = A
        cnt = 1
        while len(res) < len_b:
            res += A
            cnt += 1
        if res.find(B) != -1:
            return cnt
        res += A
        if res.find(B) != -1:
            return cnt+1
        return -1
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值