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


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

    举个例子,A = "abcd",B = "cdabcdab"。

    答案为 3, 因为 A 重复叠加三遍后为 “abcdabcdabcd”,此时 B 是其子串;A 重复叠加两遍后为"abcdabcd",B 并不是其子串。

    注意:

     A 与 B 字符串的长度在1和10000区间范围内。

    为什么(len2 / len1 + 2) * len1中要加2

    比如字符串A: "abcd"

    字符串B如果有答案

    无非有三种情况

    1.

    "abcd"   =   len2 / len1

    2.

    "..cd"(不等于A,相当于A的后缀) + "abcd" * n  =  len2 / len1 + 1

    "abcd" * n + "ab.."(不等于A,相当于A的前缀)   =  len2 / len1 + 1

    3.

    "..cd" + "abcd" * n + ".ab.." = len2 / len1 + 2

    class Solution {
    public:
        int repeatedStringMatch(string A, string B) {
            string temp = A;
            int cnt = 1;
            int len1 = A.size();
            int len2 = B.size();
            int boundary = (len2 / len1 + 2) * len1;
            for(int i = len1; i <= boundary; i += len1)
            {
                string:: size_type idx;
                idx = A.find(B);
                if(idx != string::npos)
                {
                    return cnt;
                }
                A += temp;
                cnt++;
            }
            return -1;
        }
    };
  • 相关阅读:
    Linux rm rf 命令
    Oracle时间戳转换日期
    PHP执行代码的步骤
    PHP字符串比较
    PHP调整图片大小
    PHP学习笔记2022年9月13日
    索引数组
    腾讯云安全组开放端口不生效的解决办法
    php中使用fsockopen实现异步请求
    创建ftp账户并赋予指定权限
  • 原文地址:https://www.cnblogs.com/lMonster81/p/10434022.html
Copyright © 2020-2023  润新知