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