この記事では、特定の文字列のすべての可能な部分列/部分集合を印刷するという、非常に興味深い問題を理解することになります。
コンセプトの説明
与えられた文字列の各要素に対して、2つの選択肢がある。
- 最初の要素を部分配列に含め、残りの要素について部分配列を求める。
- または、最初の要素を含めず、残りの要素の部分列を求める。
与えられた配列の最後のインデックスに到達するまで、再帰呼び出しのたびに同じことが適用されます。
この場合、形成された部分配列を表示し、次の部分配列を見つけるために戻るだけです。
再帰についてもっと知りたい場合は、以下のチュートリアルを参照してください。
再帰についてもっと読む。
コード実装
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
def get_all_subsequence(n,output,i):
if (i==len(n)):
if (len(output)!=0):
print(output)
else:
# exclude first character
get_all_subsequence(n,output,i+1)
# include first character
output+=n[i]
get_all_subsequence(n,output,i+1)
return
n = input()
get_all_subsequence(n,"",0)
print(n[0])
|
サンプル出力
上記のコードを実行すると、”abc “という文字列のすべての可能な部分配列は、以下のようになります。
cbbcaacababca |
再帰による文字列の部分配列の概念を理解していただけたでしょうか?
お読みいただきありがとうございました。