*string 的子集(bit)
S的长度小于30,要求求出S这个字符串所有的sub string。例如S = "abc",输出 "a" "b" "c" "ab" "ac" "bc" “abc",空子串不需要输出。
void subsets(string s) {
if(s.length() == 0) return;
unsigned int i = 1, judgeEnd = (1 << s.length()) - 1; //judgeEnd用来判定i 递增的终止
unsigned int mask = 0; //mask用于滤出 i 的每一位
int j = 0;
for(; (i & judgeEnd) > 0; cout << endl, ++i){
for(mask = 1 << (s.length() - 1), j = 0; j < s.length(); ++j, mask = mask >> 1){
if(mask & i) cout << s[j];
}
}
}
Last updated
Was this helpful?