题目描述:

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").

Note:
The length of A and B will be between 1 and 10000.

要完成的函数:

int repeatedStringMatch(string A, string B)

说明:

1、给定两个字符串A和B,要求判断需要重复A几次,才能在A中找到B,也就是使B成为A的子串。返回重复的最小次数。

2、这道题题意清晰,解决题目的关键在于把可能的情况想清楚。

本题分为三种情况处理:

① A比B短,这是最容易想到的情况,比如A为“abc”,B为“bcab”,我们要重复1次,使得A的长度大于等于B。接着猜判断B能不能在A中找到,这时我们用find函数即可。

  还有另一种情况,A重复完之后刚好长度等于B,但是我们有时能找到B,有时还要再重复一次才能找到B。

比如A为“abc”,B为“abcabc”,这种就是重复1次,长度刚好等于B,能找到B的情况。

比如A为“abc”,B为“bcabca”,这种就是重复1次,长度刚好等于B,但不能找到B的情况,要再重复1次。

② A比B长,有两种情况,第一种就是刚好能找到,不用重复。比如A为“abcdefg”,B为“bcd”。

  另一种是找不到,要再重复一次,比如A为“abcdefg”,B为“efga”,要再重复一次才能找到。

③ A和B一样长,同样两种情况,第一种就是刚好能找到,A==B

另一种就是要再重复一次,比如A为“abcdefg”,B为“efgabcd”,要再重复一次才能找到。

综上所述,我们使得A的长度大于等于B,如果这个时候能找到B,那么ok,返回重复的次数。

如果不能找到B,那么再重复一次A,如果重复之后能找到,那么返回新的重复的次数。

如果还是找不到,我们认为当A的长度大于等于B的时候,这时候可能还会找不到B,但如果再重复一次A,重复之后还是找不到B,那么就是不可能通过重复A来找到B的,返回-1。(这一点不认同的同学们可以自己再想一想,有问题欢迎在下方评论区交流)

代码如下:(附详解)

    int repeatedStringMatch(string A, string B)
{
string newA;
int count=0;
while(newA.size()<B.size())//重复A使得newA的长度大于等于B
{
newA+=A;
count++;//记录重复的次数
}
if(newA.find(B)!=-1)//如果找得到,返回重复次数
return count;
newA+=A;//如果找不到,再重复一次A
if(newA.find(B)!=-1)//如果找得到,返回新的重复次数
return ++count;
return -1;//如果还是找不到,返回-1
}

上述代码实测17ms,beats 82.81% of cpp submissions。

leetcode-686-Repeated String Match(重复多少次A能够找到B)的更多相关文章

  1. [LeetCode] 686. Repeated String Match 重复字符串匹配

    Given two strings A and B, find the minimum number of times A has to be repeated such that B is a su ...

  2. Leetcode 686 Repeated String Match

    Given two strings A and B, find the minimum number of times A has to be repeated such that B is a su ...

  3. 【LeetCode】686. Repeated String Match 解题报告(Python & C++)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 日期 题目地址:https://leetcode.c ...

  4. 【Leetcode_easy】686. Repeated String Match

    problem 686. Repeated String Match solution1: 使用string类的find函数: class Solution { public: int repeate ...

  5. [LeetCode] Repeated String Match 重复字符串匹配

    Given two strings A and B, find the minimum number of times A has to be repeated such that B is a su ...

  6. 686. Repeated String Match 字符串重复后的子字符串查找

    [抄题]: Given two strings A and B, find the minimum number of times A has to be repeated such that B i ...

  7. 686. Repeated String Match判断字符串重复几次可以包含另外一个

    public static int repeatedStringMatch(String A, String B) { //判断字符串a重复几次可以包含另外一个字符串b,就是不断叠加字符串a直到长度大 ...

  8. Leetcode686.Repeated String Match重复叠加字符串匹配

    给定两个字符串 A 和 B, 寻找重复叠加字符串A的最小次数,使得字符串B成为叠加后的字符串A的子串,如果不存在则返回 -1. 举个例子,A = "abcd",B = " ...

  9. 686. Repeated String Match

    方法一.算是暴力解法吧,拼一段找一下 static int wing=[]() { std::ios::sync_with_stdio(false); cin.tie(NULL); ; }(); cl ...

  10. 【刷题笔记】686. Repeated String Match

    题意 题目大意是,给两个字符串 A 和 B,问 B 是否能成为 A+A+A+...+A 的子字符串,如果能的话,那么最少需要多少个 A? 暴力解法 直接 A+A+...,到哪次 A 包含 B 了,就返 ...

随机推荐

  1. Android SDK Manager检查更新时遇到Failed to fetch URL xxxxxxx reason: Connection to xxxxxx的错误的解决办法!

    首先说明的是这个问题并不是每个人都存在,但是我和我的一个同学都有这种情况,所以我同学百度了一下,找出了解决办法. 问题描述: 使用Android SDK Manager检查在线更新,提示以下错误: & ...

  2. php模拟http请求

    在http简析中,我们提到了浏览器请求资源的一个流程,那么这个流程能不能用php来模拟呢?答案是肯定的. php模拟http请求需要实现以下步骤: 1.连接apache服务器 使用fsockopen: ...

  3. fiddler手机抓包

    配置好之后,发现手机不能连接代理服务器,用netstat发现根本就没有手机的ip地址,于是猜想是不是防火墙的问题,关闭防火墙果然能连上,开启防火墙又连不上了,这就说明确实是防火墙的问题,关闭防火墙又很 ...

  4. Facebook对MySQL全表扫描性能的改进

    原文博客如下: http://yoshinorimatsunobu.blogspot.com/2013/10/making-full-table-scan-10x-faster-in.html 如下是 ...

  5. [转]Android Parcelable和Serializable的区别

    本文主要介绍Parcelable和Serializable的作用.效率.区别及选择,关于Serializable的介绍见Java 序列化的高级认识. 1.作用 Serializable的作用是为了保存 ...

  6. centos7 redis伪集群安装

    安装gcc: yum install gcc -y   上传redis软件包到 /home下   解压: tar xf redis-3.2.11.tar.gz   进入 redis 目录 : cd r ...

  7. Basic4android v3.00 发布

    这次发布的版本主要是增加了快速debuger. 在运行时,可以在IDE 里面随时修改代码,而不需要重新发布应用. 大大提高了开发效率. Basic4android v3.00 is released. ...

  8. cmake 语法

    语法说明 CMakeLists.txt 文件遵循一种简单的语法包括 注释,命令和空格字符.注释使用#符号,从符号开始之后的一行都表示注释.命令包括命令名,左括号,分隔参数的空白字符和右括号.命令既可以 ...

  9. HDU1863 畅通工程 2017-04-12 19:25 59人阅读 评论(0) 收藏

    畅通工程 Time Limit : 1000/1000ms (Java/Other)   Memory Limit : 32768/32768K (Java/Other) Total Submissi ...

  10. 12、Docker的网络--bridge

    单机网络 Bridge Network Host Network None Network 多机网络 Overlay Network 12.1 网络命名空间   启动一个容器 docker run - ...