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

String 计算给定字符串的所有可能子字符串,string,algorithm,substring,permutation,pseudocode,String,Algorithm,Substring,Permutation,Pseudocode,可能重复: 如何计算字符串中所有可能的子字符串?例如,给定一个字符串ABCDE。所有可能的子字符串都将 A,, B C D E AB, 公元前, 光盘 判定元件, 美国广播公司, BCD, CDE, ABCD, BCDE, ABCDE 谢谢!请提供伪代码,不胜感激D只需使用两个for循环: generate substrings(string): for start in [0,1,...,string.length-1]: for end in [start,...

可能重复:

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

A,, B C D E AB, 公元前, 光盘 判定元件, 美国广播公司, BCD, CDE, ABCD, 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]
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 ""
您也可以通过两个for循环来实现这一点:

generate substrings(string):
    for start in [0,1,...,string.length-1]:
        for end in [start,...,string.length-1]:
            yield string[start...end]
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”的子字符串吗?)如果答案是否定的,只需创建一个名为

alreadyyield
的哈希表,并且每当您生成字符串时,如果您已经生成了字符串,则中止,否则将该值添加到哈希表中,以防再次看到它。例如:

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

这里有一个2美分的答案:

for (indexOfFirstLetterOfString = 0; indexOfFirstLetterOfString < string.length; indexOfFirstLetterOfString++) {

   for (indexOfLastLetterOfString = indexOfFirstLetterOfString + 1; indexOfLastLetterOfString < string.length; indexOfLastLetterOfString++) {

        addToArrayOfStrings ( string.substring (indexOfFirstLetterOfString, indexOfLastLetterOfString - indexOfFirstLetterOfString))
        incrementCounter();

    }
}
for(indexOfFirstLetterOfString=0;indexOfFirstLetterOfString
要获得组合的数量,只需在内部循环中添加一个计数器

例如,在perl中,这可能看起来像:

$a = "ABCDE";

$numberOfSubstrings = 0;

for ($indexOfFirstLetter = 0; $indexOfFirstLetter <= length($a); $indexOfFirstLetter++) {

    for ($indexOfLastLetter = $indexOfFirstLetter + 1; $indexOfLastLetter <= length($a); $indexOfLastLetter++)  {
        print substr($a, $indexOfFirstLetter, $indexOfLastLetter - $indexOfFirstLetter) . "\n";

        $numberOfSubStrings++;
    }
}

print "Number of substrings: " . $numberOfSubStrings;
$a=“ABCDE”;
$numberofsubstring=0;

对于($INDEXOFFIRSTLETER=0;$INDEXOFFIRSTLETER)这种类型的问题以前已经被问过很多次了:,,,等等。只需搜索“powerset”或“subset”。我不同意Ken和bobbymcr的观点。虽然链接的问题确实是“如何找到字符串的子字符串?”它似乎涉及到一些繁重的PHP,但解释很少,答案也是如此。所有bobbymcr链接的链接都是完全独立的问题,尽管相关(子字符串不是子集).粗略地检查,我找不到类似的语言不可知问题,并用伪代码给出了明确的答案。@ninjagecko:二读,我看你是对的——OP似乎想要比纯子集更专业的东西,但像是具有完全连接元素的子字符串(例如,来自ABC->AB和BC,但不是AC).谢谢@ninjagecko!顺便说一句,计算这样的子字符串的数量如何?如上面的例子所示,我有5个字符。P(5)=15,如上所示。我想知道函数P,以计算字符串中所有可能的子字符串的数量。谢谢。:DIt应该是2^n,因为它与查找集合的子集数量是同一个问题。它不是2^n@ÓscarLópez,因为2^5不是15。:PMy错误,子字符串的数量与powerset不一样neilmarion:如果你看第二个循环返回的字符串数,它看起来是这样的:
LENGTH+(LENGTH-1)+(LENGTH-2)+…+1
,等于
LENGTH*(LENGTH+1)/2