求字串的所有組合輸出

2021-06-18 02:37:33 字數 739 閱讀 1550

劍指offer一書中面試題28求字串的排列,給出了遞迴演算法程式。其中擴充套件題目中提到了,求字串的所有組合。比如輸入字串:「abc」,輸出應為:a、b、c、ab、ac、bc、abc.

借用書上的解題思路:如果輸入n個字元,則這n個字元能構成長度為1、長度為2、......長度為n的組合。在求長度為m的組合時,可考慮將這n個字元分成兩部分:第乙個字元和其餘所有的字元。如果組合裡包含第乙個字元,則下一步在剩餘的字元裡選取m-1個字元;如果不包含第乙個字元,則下一步在剩餘的字元裡選取m個字元。

思想比較簡單巧妙,下面是我給出的實現**:

#include "stdafx.h"

#include

#include

using namespace std;

void combine(int ilen,char* pstart,char* pend,string strbefore)

else

printf("%s\n",pstart);

}else

}else}}

}void combine(char* pstr,int ilen)

char* pend=pstr+ilen-1;

string strb;

for (int i=1;i<=ilen;i++)

combine(i,pstr,pend,strb);}}

int _tmain(int argc, _tchar* argv)

執行結果如圖:

求字串的所有組合

問題 求乙個字串的所有組合。解答 題意很清楚,是求乙個字串的所有組合,屬於中學數學知識的範疇,如給定字串str abc 則他的所有組合有 a b c ab ac bc abc。交換兩個字元時雖然能得到兩個不同的排列,但是卻屬於同乙個組合,比如ab和ba是不同的排列,但是只能算乙個組合。include...

輸出該字串中字元的所有組合

題目 輸入乙個字串,輸出該字串中字元的所有組合。舉個例子,如果輸入 abc,它的組合有a b c ab ac bc abc。分析 在本系列部落格的第 28題 字串的排列 中,我們詳細討論了如何用遞迴的思路求字串的排列。同樣,本題也可以用遞迴的思路來求字串的組合。假設我們想在長度為 n的字串中求 m個...

如何輸出字串的所有組合

問題描述 假如字串中所有字元都不重複,如何輸出字串的所有組合。例如 abca,結果應是a,b,c,ab,ac,bc,abc。最容易想到的就是遞迴了,但效率會變得很差,因為棧被呼叫了2 n次方,為了提高效率,可以構造乙個長度為n的01字串,表示輸出結果中是否包含某個字元,例如 001 c,010 b,...