首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >686. 重复叠加字符串匹配

686. 重复叠加字符串匹配

作者头像
编程张无忌
发布2021-06-01 21:38:39
发布2021-06-01 21:38:39
6940
举报
文章被收录于专栏:悟道悟道

给定两个字符串 a 和 b,寻找重复叠加字符串 a 的最小次数,使得字符串 b 成为叠加后的字符串 a 的子串,如果不存在则返回 -1。 注意:字符串 "abc" 重复叠加 0 次是 "",重复叠加 1 次是 "abc",重复叠加 2 次是 "abcabc"。 示例 1: 输入:a = "abcd", b = "cdabcdab" 输出:3 解释:a 重复叠加三遍后为 "abcdabcdabcd", 此时 b 是其子串。 示例 2: 输入:a = "a", b = "aa" 输出:2 示例 3: 输入:a = "a", b = "a" 输出:1

代码语言:javascript
复制
class Solution {
    public int repeatedStringMatch(String a, String b) {
        /**  
        
        如果A的长度小于B的长度,这时B是A的重复子串,则A的重复次数不超过 Bsize / Asize + 2。
         A*q或者 A*(q+1)  或者A*(q+2)。  --> q>=len(B)/len(A)
         */

            int q=b.length()/a.length();
            StringBuilder sb=new StringBuilder();//拼接用
            int count=q;//循环用
            while(count>0){
                sb.append(a);  
                count--;
            }

            //看下是否属于sb的子串
            if(sb.toString().indexOf(b)!=-1){
                //属于
                return q;
            }

            //如果不属于在拼接一次a
            sb.append(a);
            if(sb.toString().indexOf(b)!=-1){
                 //属于
                 return q+1;
            }
            sb.append(a);
            if(sb.toString().indexOf(b)!=-1){
                 //属于
                 return q+2;
            }

            //都没找到 说明找不到了 返回-1
            return -1;
    }
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021/05/29 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档