string - 计算给定字符串的所有可能的子字符串

标签 string algorithm substring permutation pseudocode

Possible Duplicate:
How to find all substrings of a string in PHP
Find all subsets of a list

如何计算字符串的所有可能的子字符串?例如给定一个字符串 ABCDE。它所有可能的子串都是

一个, 乙, C, D、 乙, AB, 公元前, 光盘, 德, ABC, 二进制码, CDE, A B C D, BCDE, ABCDE

谢谢!伪代码将受到高度赞赏。 :D

最佳答案

只需使用两个 for 循环:

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 ""

您可能还想在返回的序列中包含空字符串 "",因为它是所有字符串的子字符串。

您还需要考虑多次生成重复字符串是否有效(例如,您是否将“ABA”作为“ABABA”的子字符串返回两次?)。如果答案是否定的,只需创建一个名为 alreadyYielded 的哈希表,每当您生成时,如果您已经生成了字符串,则中止,否则将值添加到哈希表中,以防您再次看到它。例如:

seen = new HashTable()
...
        substring = string[...]
        if substring not in seen:
            seen.add(substring)
            yield substring
...

关于string - 计算给定字符串的所有可能的子字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16223467/

相关文章:

string - 一边劈头发,一边劈绳子

arrays - csh向数组中添加字符串,空格问题

javascript - 解析javascript中的字符串

algorithm - 如何证明有向无环图中至少存在一个入度为零的顶点?

algorithm - 你如何证明一个序列的大θ是它的首项?

r - 在 R 中将字符串修剪为特定数量的字符

java - Java 中的字符串字谜

c++ - 查找数组中最大数的有效方法

php - 拆分逗号分隔的字符串,但只用逗号分隔

c - 在 C 中检查一个字符串是否包含另一个字符串的简单方法?