2017-08-06 22 views
0

我想在JavaScript中創建一個函數,對於給定的字符串,通過每次只刪除字符串中的4個字符來輸出 所有可能的組合。我如何輸出所有的組合?起始字符串的長度是動態的。提前感謝。如何通過每次刪除4個字符來獲取字符串的所有組合?

**注:**刪除4個字符的順序不應該總是連續

例子:

string:BmamdWRtaW51dGfVzZMI= //B m a m d W R t a W 5 1 d G f V z Z M I = 
          // 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 

想印刷這樣所有可能的組合:

BmamdWRtaW51dGfVzZMI= (starting string) 
-dWRtaW51dGfVzZMI=  (removed first 4 characters) 
-BWRtaW51dGfVzZMI=  (removed 4 consecutive charaters start from 2th character) 
-BmRtaW51dGfVzZMI=  (removed 4 consecutive charaters start from 3th character) 
-BmataW51dGfVzZMI=  (removed 4 consecutive charaters start from 4th character) 
- 
- 
+1

你有沒有嘗試過任何特殊的方法這麼遠? – Nisarg

+1

這4個字符總是連續的嗎? –

+0

感謝您的回覆。 @讓 - 克勞德科萊特4個角色不應該總是連續的,我想打印出所有可能的組合。 – user1788736

回答

3

假定n字符串的長度爲str

for (a=0; a<n-3; a++) { 
    for (b=a+1; b<n-2; b++) { 
     for (c=b+1; c<n-1; c++) { 
      for (d=c+1; d<n; d++) { 
       //delete the ath, bth, cth and dth charaters of the initial string 
       result = str.substr(0, a)+str.substr(a+1, b-a-1)+str.substr(b+1, c-b-1)+str.substr(c+1, d-c-1)+str.substr(d+1); 

       //and print the result 
      } 
     } 
    } 
} 
+1

要小心如果你真的從字符串中逐步刪除字符:保存的方法是首先刪除索引最高的字符,然後刪除前一個字符。否則,你必須糾正剩餘指數。 –

+0

@ Jean-Claude Colette謝謝你的例子。這個變量是初始字符串,爲什麼你提到要刪除3個字母而不是4個?如何從每個起始字符串的組合中開始刪除4個字符?例如,一個字符串大小爲21個將會產生17個字符串的組合? – user1788736

+1

str是初始字符串,並且我在開始時提取子字符串,在每個字符與最後一個字符之間。 –

0

一些僞代碼的遞歸函數:

myFunction (charactersRemoved, remainingString, previousString): 

if charactersRemoved === 4 then echo previousString + remainingString 
return 

foreach character in remainingString 
remainingString -= character 
myFunction (charactersRemoved + 1, remainingString, previousString) 
previousString += character 
endfor 

endfunction 

myFunction(0, string, '') 
相關問題