459. 重复子字符串(Python)

Python011

459. 重复子字符串(Python),第1张

难度:★☆☆☆☆

类型:数组

给定一个非空的字符串,判断它是否可以由它的一个子串重复多次构成。给定的字符串只含有小写英文字母,并且长度不超过10000。

示例 1:

输入: "abab"

输出: True

解释: 可由子字符串 "ab" 重复两次构成。

示例 2:

输入: "aba"

输出: False

示例 3:

输入: "abcabcabcabc"

输出: True

解释: 可由子字符串 "abc" 重复四次构成。 (或者子字符串 "abcabc" 重复两次构成。)

这里我们观察到一个现象,对于一个字符串s,我们将两个该字符串连接成一个更长的字符串(s_double),该字符串中至少包含两个s子串,如果s可以由多个重复单元构成,那么合并后的字符串中一定包含超过两个s子串(可重叠),例如,两个"abab"组成的"abababab"中包含3个"abab",而两个"aba"组成的"abaaba"则只包含两个"aba",根据这个原理,我们只需要统计s+s中s(可重叠)出现的次数,并与2比较即可。

这里为了简化计算,我们把s+s的首尾两端字符去掉,这样就只需要查看s是否在剩余的字符串中即可。编码时通过索引范围[1:len(s)*2-1]起到去掉首尾两端字符的效果。

如有疑问或建议,欢迎评论区留言~

A = ["cha", "chb", "chc", "cha123", "chabc", "chc-12345"]

B = ["chd", "che", "ch169", "c123"]

s = "cha123"    # the string you get

if s in A:

    print("A")

elif s in B:

    print("B")

else:

    print("Not in A or B")

比较简单的一个例子,把几个同为一类的组成一个列表,然后用in判断字符串是否在对应的列表中有出现。

希望对你有所帮助~

您好,python中s[1][1]的意思是,s是一个列表,s[1]表示的是列表的第二个元素,而s[1][1]表示的是第二个元素中的第二个元素,也就是说s[1][1]表示的是列表中的第三个元素。例如,如果s = [1,2,3,4],那么s[1][1]就表示的是3,也就是列表中的第三个元素。因此,python中s[1][1]的意思就是表示列表中的第三个元素。