generate substrings(string):
for start in [0,1,...,string.length-1]:
for end in [start,...,string.length-1]:
yield string[start...end]
你也可以用两个for循环这样做:
generate substrings(string):
for substringLength in [1,2,...,string.length]:
for start in range [0,1,...,string.length-substringLength]:
yield string[start...(start+substringLength-1)]
yield ""
2 回答
只需使用两个for循环:
你也可以用两个for循环这样做:
您可能希望在返回的序列中包含空字符串
""
,因为它是所有字符串的子字符串 .您还需要考虑多次产生重复字符串是否有效(例如,您将"ABA"作为"ABABA"的子字符串返回两次?) . 如果答案是否定的,只需创建一个名为
alreadyYielded
的哈希表,并且每当你产生时,如果你已经产生了字符串,则中止,否则将值添加到哈希表中以防再次看到它 . 例如:这是一个2美分的答案:
要获得组合的数量,只需在内部循环中添加一个计数器 .
例如,在perl中,这可能看起来像: