字符串的所有不重复组合
2013-05-14 16:09
387 查看
输出一个串的所有可能字符组合,例如输入“abcd“,输出a,b,c,d,ab,ac,ad,bc,bd,cd,abc,abd,acd,bcd,abcd
输入串可能会有重复字符,例如输入”abcc“,输出a,b,c,ab,bc,ac,cc,abc,acc,bcc
请设计算法和写出代码或伪代码
c++代码如下:
输入串可能会有重复字符,例如输入”abcc“,输出a,b,c,ab,bc,ac,cc,abc,acc,bcc
请设计算法和写出代码或伪代码
c++代码如下:
/************************************************************************/ /*一个长度为 n 的串的所有可能字符串组合有2^n个,可用1-2^n逐个转换成对应 */ /*二进制串中1的组合而成。 */ /************************************************************************/ #include <math.h> #include <iostream> #include <vector> #include <algorithm> #include <string> using namespace std; vector<string> vecStr;//保存得到的子串 bool contains(string str) //判断vecStr中是否已经存在str,返回bool值 { if (vecStr.size() == 0) // size为0的情况 { return false; } for (int i = 0; i < (int)vecStr.size(); i++) { if (str == vecStr[i]) { return true; } } return false; } void progress(string str) { char flag[20]; char temp[20]; for (int i = 1; i < (1<<str.length()); i++) { _itoa_s(i,flag,2); //i转换成对应的二进制01串 //将二进制串中的为1的位置对应的字符整合到一个string中,并加入vector中 string s(flag); int j = 0; for (int i = 0; i < (int)s.length(); i++) //从后向前遍历 二进制串 { if(*(s.end()-1-i) == '1') { temp[j++] = str.at(str.length() - i - 1); } } temp[j] = '\0'; string ss(temp); reverse(ss.begin(),ss.end()); //翻转 if (!contains(ss)) { vecStr.push_back(ss); } } sort(vecStr.begin(),vecStr.end()); //字典序排序,可不加入 for (int i = 0; i < (int)vecStr.size(); i++) //打印 { cout<<vecStr[i]<<endl; } } int main(){ string str; cin>>str; progress(str); return 0; }
相关文章推荐
- 输入一串不重复的字符串,列出所有可能的组合(java实现)
- 给一个字符串(包含重复字符),打印它的所有可能的组合。
- 编程列出一个字符串的全字符组合情况,原始字符串中没有重复字符,例如: 原始字符串是"abc",打印得到下列所有组合情况
- 输出字符串所有组合(含有重复的字符)及输出其所有子串(含有重复的字符)
- 给定一个字符串,找出其所有不重复的排列组合
- for循环的小练习之6个不重复数字的所有组合输出
- 【编程题】输入一个字符串,输出该字符串中相邻字符的所有组合。
- 删除字符串中所有重复出现的字符
- 使用循环的方式打印字符串所有排列组合
- 题目:输入一个字符串,输出该字符串中字符的所有组合
- 输出该字符串中字符的所有组合
- 编程列出一个字符串的全字符组合情况,原始字符串中没有重复字符
- 求集合/字符串中的所有组合 (C语言)
- 9.5---所有字符串的排列组合(CC150)
- 算法1(输出字符串的所有组合形式,例如 string s="abc" 输出所有形式 a,b,c,ab,bc,abc 可以与顺序无关)
- SQLSERVER查询单个数据表所有字段名组合成的字符串脚本
- Java练习题-输入一个字符串,输出该字符串中字符的所有组合(二)
- 【每日面试题】输入一字符串,输出该字符串的所有组合
- 显示字符串中所有字符的排列组合。
- 字符串的所有组合问题,输入三个字符a,b,c,则它们的组合有a,b,c,ab,ac,bc,abc