可能重复:
How to find all substrings of a string in PHP
Find all subsets of a list
如何计算字符串的所有可能子字符串?例如给出一个字符串ABCDE。所有可能的子串都是
A, B, C, d, E, AB, 公元前, 光盘, DE, ABC, BCD, CDE, A B C D, BCDE, ABCDE
谢谢!伪代码将受到高度赞赏。 :d
答案 0 :(得分:5)
只需使用两个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
...
答案 1 :(得分:2)
这是一个2美分的答案:
for (indexOfFirstLetterOfString = 0; indexOfFirstLetterOfString < string.length; indexOfFirstLetterOfString++) {
for (indexOfLastLetterOfString = indexOfFirstLetterOfString + 1; indexOfLastLetterOfString < string.length; indexOfLastLetterOfString++) {
addToArrayOfStrings ( string.substring (indexOfFirstLetterOfString, indexOfLastLetterOfString - indexOfFirstLetterOfString))
incrementCounter();
}
}
要获得组合数,只需在内循环中添加一个计数器。
例如,在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;