2013-04-08 58 views
0

我不知道是否「組合」是正確的詞,但我想掃描一個字符串,以獲得所有可能的子字符串,如 前。JS +數學:計算排列或子串的組合

var str = "abcd"; 

// do something here, a for loop i guess... 

WANTED OUTPUT: 
a 
ab 
abc 
abcd 
b 
bc 
bcd 
c 
cd 
d 

我沒有興趣像DCBA結果,所以,我是不是在尋找排列... 什麼是做到這一點的功能?

謝謝!!

+0

你有沒有給它一個去? – 2013-04-08 19:58:04

+0

你確定你不想'ac','ad','abd','acd','bd'嗎? – kennebec 2013-04-08 20:30:23

+0

@kennebec:他要求子串,而不是子串。 – Bergi 2013-04-09 09:13:54

回答

0

要獲得所有可能的子串(你說得對,這不是「置換」),你可以只使用兩個嵌套循環的起點和終點指標:

var str = "abcd"; 
var substrings = [], 
    len = str.length; 
for (var i=0; i<len; i++) 
    for (var j=i+1; j<=len; j++) 
     substrings.push(str.slice(i, j)); 

substrings; 
// ["a", "ab", "abc", "abcd", "b", "bc", "bcd", "c", "cd", "d"] 

如果你想獲得空字符串,只需將其添加到substrings的初始化即可。

+0

我和你的答案是完全一樣的巧合:) – 2013-04-08 20:19:08

+0

@Ranjit:你可以刪除你的,並upvote我:-) – Bergi 2013-04-08 20:29:21

+0

都沒有返回所有組合.... – kennebec 2013-04-08 20:44:41

1

它很容易,你可以自己做到這一點:

var str = "abcd"; 
var substrings = []; 
for (var i = 0; i < str.length; i++){ 
    for (var j = i + 1; j <= str.length; j++) 
    substrings.push(str.substring(i, j)); 
} 
+0

抱歉,我沒有找到以前的答案。 – 2013-04-08 20:18:29