原题出自:https://leetcode.cn/problems/repeated-substring-pattern/
题目:

题解:
1、字符串长度为空,则返回false。
2、字符串长度为1,则为true,是由子串构成的。
3、字符串长度为2,判断首尾字符是否相等,相等则为true。
4、字符串长度大于2,则需要「枚举」子串。
1)子串最大长度不能超过字符串的一半。
2)子串个数是字符串的偶数倍。
3)当子串长度为n时,s[i]位置s[i+n]位置的值应一致。
代码:
class Solution(object):
    def repeatedSubstringPattern(self, s):
        """
        :type s: str
        :rtype: bool
        """
        n = len(s) #全长
        #子串最大长度不会超过字符串的一半长度,所以默认子串最大循环长度为n//2+1 11//2+1=6
        for sub_n in range(1, n//2 + 1):
            # 子串长度应为字符串的整数倍,所以采用余数算法
            if n % sub_n == 0:
                # 从0号位置开始,循环判断后面的字符是否等于前面的子串
                if all(s[j] == s[j - sub_n] for j in range(sub_n, n)):
                    return True
        return False 
python的all()函数:判定给定的迭代参数是否都为true
测试用例:
面试时经常会被问到,针对此算法题,设计下测试用例。
1)等价类划分法:在需求范围内挑选1条有效、无效的字符串。例如:aa、aba;
2)边界值法:在超出需求范围外挑选字符串。
3)错误推算法:基于经验去除推算可能出错的地方,例如:为空、参数验证。
4)判定表分析:所有条件的组合。


















