给定一个非空的字符串 s ,检查是否可以通过由它的一个子串重复多次构成。弱鸡解法

该篇文章介绍了如何使用C++编写一个名为Solution的类,通过两个for循环来检查给定字符串s中是否存在重复的子串模式。方法是逐个截取可能的子串并检查其是否在后续部分重复。

思路:首先,空字符和单个字符串肯定是不能重复,先把这种情况排除。然后字符串“ababab",先截取字符串“a”,看是否重复后面的字符串“babab”,再截取“ab”看是否重复后面的字符“abab”,如果能完成重复,则满足要求,结束代码,如果不能,则继续截取“abc”进行重复。

代码:先排除空字符和单个字符,第一个for循环截取字符串,最长为n/2,第二个for循环用于检查是否可以重复

class Solution {
public:
    bool repeatedSubstringPattern(string s) {
        int n = s.length();
        if (n <= 1) return false;
        bool flag = true;
        for (int i = 1; i <= n / 2; i++)
        {
            if (n % i == 0)
            {
                flag = true;
                string t = s.substr(0, i);
                for (int j = i; j + i <= n; j += i)
                {
                    string t1 = s.substr(j, i);
                    if (t != t1)
                    {
                        flag = false;
                        break;
                    }
                }
                if (flag == true) break;
            }
        }
        return flag;
    }
};

评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值