字符串组合

来源:互联网 发布:java微信怎么登陆 编辑:程序博客网 时间:2024/05/16 14:56

以一个简单的字符串题开始我的博客。

题目:输入一个字符串,给出这个字符串中字符的组合。如:输入abc,它的组合有a、b、c、ab、ac、bc、abc。


分析:对于每个字母都有两种选择,选他或者不选他,我们可以用一个二进制位表示选择情况,1表示选择,0表示不选择,如ab = 110, c = 001, abc = 111。而且abc我们可以通过ab和c这两个字符串相加得到。所以我们可以通过自底向上的方法,缓存中间结果,省去不必要的重复计算。


代码:

#include <iostream>#include <string>#include <vector>#include <math.h>using namespace std;string strInput("abcd");void main(){int TableSize = 1;for (int i = 0; i < strInput.length(); ++i){TableSize *= 2;}//初始化字符串表,长度2^lengthvector<string> stringTable(TableSize);stringTable[0] = "";//currentBit用于标识现在处理的哪一位,currentNum用于标识应减去的最高位值,用于对子字符串的索引int currentBit = 0;int currentNum = 1;int inputLength = strInput.length();for (int i = 1; i < TableSize; ++i){if (i == currentNum * 2){++currentBit;currentNum *= 2;}//索引子字符串int substrIndex = i - currentNum;stringTable[i] = strInput.substr(inputLength - currentBit - 1, 1) + stringTable[substrIndex];}}


原创粉丝点击