字符串排列组合
2017-07-07 16:24
267 查看
1.输入字符串abc,输出abc acb bac bca cab cba,代码如下:
2.输入字符串abcc,即存在重复字符,输出abcc accb bacc bcca cab ccba ...代码如下:
#include<algorithm>
#include<string>
#include<vector>
#include<iostream>
#include<unordered_map>
using namespace std;
void backTrack(string str,vector<string> &res,int k) {
if (str.size() == k) {
res.push_back(str);
return;
}
unordered_map<char, int> m;
for (int i = k; i < str.size(); i++) {
if (m[str[i]]==0) {
m[str[i]] = 1;
swap(str[i], str[k]);
backTrack(str, res, k + 1);
swap(str[i], str[k]);
}
}
}
int main() {
string str = "abcc";
vector<string> res;
backTrack(str,res,0);
for (int i = 0; i < res.size(); i++) {
cout << res[i] << endl;
}
}
3.输入字符串abc,输出aaa aab aac baa caa ...,代码如下:
4.输入字符串abc,输出a,b,c,ab,ac,bc,abc,代码如下:
#include<algorithm> #include<string> #include<vector> #include<iostream> using namespace std; void backTrack(string str, vector<string> &res, int k) { if (str.size() == k) { res.push_back(str); return; } for (int i = k; i<str.size(); i++) { swap(str[i], str[k]); backTrack(str, res, k + 1); swap(str[i], str[k]); } } int main() { string str = "abc"; vector<string> res; backTrack(str, res,0); for (int i = 0; i < res.size(); i++) { cout << res[i] << endl; } }
2.输入字符串abcc,即存在重复字符,输出abcc accb bacc bcca cab ccba ...代码如下:
#include<algorithm>
#include<string>
#include<vector>
#include<iostream>
#include<unordered_map>
using namespace std;
void backTrack(string str,vector<string> &res,int k) {
if (str.size() == k) {
res.push_back(str);
return;
}
unordered_map<char, int> m;
for (int i = k; i < str.size(); i++) {
if (m[str[i]]==0) {
m[str[i]] = 1;
swap(str[i], str[k]);
backTrack(str, res, k + 1);
swap(str[i], str[k]);
}
}
}
int main() {
string str = "abcc";
vector<string> res;
backTrack(str,res,0);
for (int i = 0; i < res.size(); i++) {
cout << res[i] << endl;
}
}
3.输入字符串abc,输出aaa aab aac baa caa ...,代码如下:
#include<algorithm> #include<string> #include<vector> #include<iostream> using namespace std; void backTrack(string str, vector<string> &res,string perRes, int k) { if (str.size() == k) { res.push_back(perRes); return; } for (int i = 0; i<str.size(); i++) { perRes += str[i]; backTrack(str, res, perRes, k + 1); perRes.erase(perRes.end()-1); } } int main() { string str = "abc"; vector<string> res; string perRes; backTrack(str, res, perRes,0); for (int i = 0; i < res.size(); i++) { cout << res[i] << endl; } }
4.输入字符串abc,输出a,b,c,ab,ac,bc,abc,代码如下:
#include<algorithm> #include<string> #include<vector> #include<iostream> using namespace std; void strCombine(string str,vector<string> &res,string perRes) { if (str.size() == 0) { if (perRes.size() != 0) { res.push_back(perRes); } return; } strCombine(&str[1], res, perRes); perRes += str[0]; strCombine(&str[1], res, perRes); } int main() { string str = "abc"; vector<string> res; string perRes; strCombine(str,res,perRes); for (int i = 0; i < res.size(); i++) { cout << res[i] << endl; } }
相关文章推荐
- 给定一个字符串,找出其所有不重复的排列组合
- 字符串的排列输出 和组合输出
- 编写一个方法,返回某字符串的所有排列组合。
- 字符串的全排列和组合算法
- 28+打印并统计字符串的全排列和组合
- 编程之法:字符串的排列组合
- 一道字符串排列组合算法题
- JAVA实现abc字符串的排列组合
- 字符串数组元素排列与组合的Java递归实现
- (C#)计算字符串排列组合数 如"abcd"组合数为24 "aabb"组合数为6
- 面试100题系列之5字符串的排列组合问题
- 剑指offer 字符串的排列原题,java实现,组合排列去重
- 字符串的排列和组合代码 C++
- 字符串数组元素排列与组合
- 9.5---所有字符串的排列组合(CC150)
- 字符串的排列组合问题
- 字符串的全排列和组合问题整理
- 字符串的排列组合问题
- 实现一个字符串的所有排列组合
- 字符串的排列和组合