LeetCode 686 重复添加字符串匹配[字符串] HERODING的LeetCode之路

在这里插入图片描述
解题思路:
一道看起来很简单的题目,解题的关键在于分析。首先考虑两种情况,b的长度比a短,或者b的长度比a长,比a短还能是a的子串,只能说b是a的子串或者是两个a连接的中间部分,如果b的长度比a的长度长,a首先得叠加到至少大于等于b的长度,此时b也可能是当前叠加得到的两个a连接的中间部分。所以,综上所述,不管叠加几次,我们都能知道最大的叠加次数是多少,既然这样每次从1开始一直遍历到最大叠加次数,查看中间是否有b,有则返回次数无则继续。最终没找到返回-1,代码如下:

class Solution {
public:
    int repeatedStringMatch(string a, string b) {
        string temp = a;
        // 翻转次数
        int count = 1;
        int lenA = a.size(), lenB = b.size();
        // 最多翻转次数
        int maxCount = lenB / lenA;
        while(count <= maxCount + 2) {
            if(temp.find(b) != string::npos) {
                return count;
            }
            temp += a;
            count ++;
        }
        return -1;
    }
};

时间复杂度:O(n/m)
空间复杂度:O(1)

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

HERODING77

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值