【问题标题】:How to get all combinations of a string by removing 4 characters each time?如何通过每次删除 4 个字符来获取字符串的所有组合?
【发布时间】:2017-08-06 13:12:16
【问题描述】:

我正在尝试在 JavaScript 中创建一个函数,该函数对于给定的字符串将通过删除输出所有可能的组合 每次只有字符串中的 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)
-
-

【问题讨论】:

  • 到目前为止,您是否尝试过任何特定的方法?
  • 这4个字符总是连续的吗?
  • 感谢您的回复。 @Jean-Claude Colette 4 个字符不应该总是连续的,我想打印出所有可能的组合。
  • @Jonas w.感谢您的回复。字符串内容和大小是动态的,但我每次只能删除 4 个字符。字符串上的字符没有任何顺序!

标签: javascript jquery string combinations


【解决方案1】:

假设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
            }
        }
    }
}

【讨论】:

  • 如果你真的一步一步地从字符串中删除字符,要小心:这样做的保存方法是首先删除索引最高的字符,然后是前一个。否则,您必须更正剩余索引。
  • @Jean-Claude Colette 谢谢你的例子。哪个变量是初始字符串,为什么你提到要删除 3 个字母而不是 4 个?如何开始从每个起始字符串组合中删除 4 个字符?例如大小为 21 的字符串将产生多少个 17 字符串的组合?
  • str 是初始字符串,我在开头、每个和最后一个之间提取子字符串。
【解决方案2】:

递归函数的一些伪代码:

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, '')

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-07-18
    • 2014-07-06
    • 1970-01-01
    • 2023-03-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-16
    相关资源
    最近更新 更多