2012-01-21 65 views
1

給出的字符串:組合字符串,同時保持訂單詞

String words = "Mary had a little lamb"; 

如何獲取句子片段的組合,而在原句的單詞的出現的順序被保持???

例如:

{'Mary had a little lamb'} 
{'Mary had a little', 'lamb'} 
{'Mary had a', 'little lamb'}, {'Mary had a', 'little', 'lamb'} 
{'Mary had', 'a little lamb'}, {'Mary had', 'a little', 'lamb'}, {'Mary had', 'a', 'little lamb'}, {'Mary had', 'a', 'little', 'lamb'} 
{'Mary', 'had a little lamb'}, {'Mary', 'had a little', 'lamb'}, {'Mary', 'had a', 'little lamb'} and so on... 

感謝提前:)

回答

4

想想這樣說:

Mary <1> had <2> a <3> little <4> lamb 

每個<number> S的可以是真或假。如果這是真的,那麼你在那個地方剪下句子。

所以,如果你有N + 1個詞語,你的問題被減少到通過具有N位數字的二進制表示打算,也就是從0到2^n-1個

例子:

0110 -> {'Mary had', 'a', 'little lamb'} 
1111 -> {'Mary', 'had', 'a', 'little', 'lamb'} 
0001 -> {'Mary had a little', 'lamb'} 
1011 -> {'Mary', 'had a', 'little', 'lamb'} 
+0

尼斯:)但我的問題有一個約束,因爲,如果<2>設置爲false,我不能有<3>或<4>或任何此類以下變量是真實的。這不會維持秩序。 示例:不允許這樣的組合 - {'Mary','little lamb'} – codemaniac

+0

感謝您的示例:)幫助 – codemaniac

+0

如果您在二進制中思考它,我不認爲這很難找到該模式數字,對吧? – Shahbaz

0

這裏有4個單詞分隔符(空格)。每個空間都可以被句子分隔符替換(或不替換)。所以有16 = 2^4的情況,它們對應於二進制數字0000 ... 1111。

1

要獲得您的問題中顯示的輸出,雖然不是以相同的順序,這是我會做的。
我將使用Mathematica代碼,但概念是通用的。

string = "Mary had a little lamb"; 
set = StringSplit[string] 
n = [email protected] 
{"Mary", "had", "a", "little", "lamb"} 
5 

所以,你需要打破的句子翻譯成字(StringSplit)的功能。

然後,您將需要一個函數來生成integer partitions和一個知道重複元素的置換函數。這兩種算法都可以在StackOverflow上找到。

IntegerPartitions[n] 
{{5}, {4, 1}, {3, 2}, {3, 1, 1}, {2, 2, 1}, {2, 1, 1, 1}, {1, 1, 1, 1, 1}} 

一旦置換每個分區( 「每個」 是/@)我們得到了所有的方式來線性分割一組五個部分:

parts = Join @@ Permutations /@ IntegerPartitions[n] 
{{5}, {4, 1}, {1, 4}, {3, 2}, {2, 3}, {3, 1, 1}, {1, 3, 1}, 
{1, 1, 3}, {2, 2, 1}, {2, 1, 2}, {1, 2, 2}, {2, 1, 1, 1}, {1, 2, 1, 1}, 
{1, 1, 2, 1}, {1, 1, 1, 2}, {1, 1, 1, 1, 1}} 

最後我們需要一個函數根據一系列長度來分割一個集合。我把我的dynamicPartition:

dynamicPartition[set, #] & /@ parts // Column 
{{Mary,had,a,little,lamb}} 
{{Mary,had,a,little},{lamb}} 
{{Mary},{had,a,little,lamb}} 
{{Mary,had,a},{little,lamb}} 
{{Mary,had},{a,little,lamb}} 
{{Mary,had,a},{little},{lamb}} 
{{Mary},{had,a,little},{lamb}} 
{{Mary},{had},{a,little,lamb}} 
{{Mary,had},{a,little},{lamb}} 
{{Mary,had},{a},{little,lamb}} 
{{Mary},{had,a},{little,lamb}} 
{{Mary,had},{a},{little},{lamb}} 
{{Mary},{had,a},{little},{lamb}} 
{{Mary},{had},{a,little},{lamb}} 
{{Mary},{had},{a},{little,lamb}} 
{{Mary},{had},{a},{little},{lamb}} 
相關問題