2010-07-04 19 views
2

這裏的字符串的Python列表:分解字符串轉換成已知圖案

圖案= [ 「KBKKB」, 「BBBK」, 「BKB」, 「KBBB」, 「KBB」, 「 BKBB 「 」BBKB「, 」KKBKB「, 」BKBK「, 」KBKB「, 」KBKBK「, 」步步高「, 」BB「, 」BKKB「, 」BBB「, 」 KBBK「, 」BKKBK「, 「KB」, 「KBKBK」, 「KKBKKB」, 「KBK」, 「BBKBK」, 「BBBB」, 「BK」, 「KKBKBK」, 「KBBKB」, 「BBKKB」, 「KKKKBB」, 「KKB」 ]

我有一個由K和僅B的任意長度的輸入字符串。我想知道輸入字符串的所有可能的完整分解。的8乙只是一個例子的字符串:

BBBBBBBB

下面是可能的分解

BB BB BB BB BB

BBBB BBBB

BBBB BB BB

BB BB BBBB

BBB BBB BB

BB BBB BBB

任何人都可以指導我如何去做呢?我現在不太在意效率。

+0

你可以定義一個分解?爲什麼不是B B B B B B B B可能的分解?另一個角色如何相關? – 2010-07-04 12:11:56

+1

@Jason R. Coombs:'B'不被允許,因爲它不是模式列表的成員。 – 2010-07-04 12:15:35

+0

@Jason因爲這不是一個有效的「重量」。其實我正在研究波斯語/阿拉伯語韻律。該項目是GPL下的開放源代碼http://github.com/mohsinhijazee/Ustaad-Aasi – 2010-07-04 15:59:52

回答

5

這裏有一種方法使用遞歸:

def getPossibleDecompositions(s): 
    if s == '': 
     yield [] 
    else: 
     for pattern in patterns: 
      if s.startswith(pattern): 
       for x in getPossibleDecompositions(s[len(pattern):]): 
        yield [pattern] + x 

for x in getPossibleDecompositions('BBBBBBBB'): 
    print x 
+0

非常感謝!它似乎在做這項工作。 – 2010-07-04 16:05:46