zoukankan      html  css  js  c++  java
  • leetcode-686-Repeated String Match(重复多少次A能够找到B)

    题目描述:

    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。

  • 相关阅读:
    「NOTE」支配树
    「SOL」支配 (2021省选A卷)
    「SOL」矩阵游戏 (2021省选A卷)
    「SOL」最差记者2 (LOJ / JOISC2016)
    「SOL」Nondivisible Prefix Sums(AtCoder)
    「SOL」Spaceship(LOJ/USACO)
    「NOTE」可持久化非旋Treap
    「SOL」事情的相似度(LOJ)
    FTP(File Transfer Protocol)——文件传输协议详解
    DHCP(Dynamic Host Configutation Protocol)——动态主机配置协议详解
  • 原文地址:https://www.cnblogs.com/chenjx85/p/9188140.html
Copyright © 2011-2022 走看看