Python 如何计算将字符串分成任意大小的N个部分的方法数?

Python 如何计算将字符串分成任意大小的N个部分的方法数?,python,string,combinations,Python,String,Combinations,我试图计算在Python中将给定字符串分成三部分的方法的数量 示例:“bbbbb”可分为三部分6种方式: b|b|bbb b|bb|bb b|bbb|b bb | b | bb bb | bb | b bbb|b|b 我的第一个想法是N选择K,其中N=字符串的长度和K=拆分方法的数量(3),但这只适用于3和4 我的下一个想法是迭代字符串,计算第一个三分之一可以分割的点的数量,第二个三分之一可以分割的点的数量,然后乘以两个计数,但我在实现这一点上遇到了困难,我甚至不太确定它是否有效 如何计算将字符

我试图计算在Python中将给定字符串分成三部分的方法的数量

示例:
“bbbbb”
可分为三部分6种方式:

  • b|b|bbb
  • b|bb|bb
  • b|bbb|b
  • bb | b | bb
  • bb | bb | b
  • bbb|b|b
  • 我的第一个想法是
    N选择K
    ,其中
    N
    =字符串的长度和
    K
    =拆分方法的数量(3),但这只适用于3和4

    我的下一个想法是迭代字符串,计算第一个三分之一可以分割的点的数量,第二个三分之一可以分割的点的数量,然后乘以两个计数,但我在实现这一点上遇到了困难,我甚至不太确定它是否有效


    如何计算将字符串拆分为
    N
    部分的方法?

    根据拆分的位置将其视为您选择的元素:

    b ^ b ^ b ^ ... ^ b
    
    ^
    是可以拆分的地方,有
    N-1
    个位置可以拆分(
    N
    是字符串的长度),如果要将字符串拆分为
    M
    个部分,需要选择
    M-1
    拆分位置,因此
    N-1选择M-1

    例如,
    N=5
    M=3
    <代码>(N-1选择M-1)=(4选择2)=6

    实施:

    import scipy.special
    
    s = 'bbbbb'
    n = len(s)
    m = 3
    res = scipy.special.comb(n - 1, m - 1, exact=True)
    
    print(res)
    
    输出:

    6
    

    希望这对你也有帮助:

    string = "ABCDE"
    div = "|"
    out = []
    for i in range(len(string)):
        temp1 = ''
        if 1 < i < len(string):
            temp1 += string[0:i-1] + div
            for j in range(len(string) + 1):
                temp2 = ""
                if j > i:
                    temp2 += string[i-1:j-1] + div + string[j-1:]
                    out.append(temp1 + temp2)
    print(out)
    

    空字符串也是一个子字符串,是否允许任何“部分”为空字符串?(问题是一个实际的问题,例如,考虑什么是<代码>‘a’。分裂(′)< /代码>返回)。答案是<代码>导入数学;math.comb(N-1,K-1),使用Python标准库中的函数,其中
    N
    是字符串的长度,
    K
    是片段数。每个片段都必须是非空字符串。我不知道他为什么在python标签上贴这个问题?:)这是一个统计问题。我认为thejoj的进球是另外一回事……啊,这是有道理的。非常感谢。在Python中,这是一个统计问题,两者兼而有之。我已经写了一个choose和factorial函数,只是没有意识到-1部分。现在可以了,再次感谢。
    ['A|B|CDE', 'A|BC|DE', 'A|BCD|E', 'AB|C|DE', 'AB|CD|E', 'ABC|D|E']