登录后复制 string s=" xxxx"; sort(s.begin(),s.end()); do { //处理s,s是各个排列 }while(next_permutaion(s.begin(),s.end())); 1.2.3.4.5.6.7. 注意:必须先排序后才能用next_permutation 登录后复制 #include<iostream> #include<string> #include<sstream> #include<algorithm> #include<unordered_map> using namespace std; //求str的所有排序 bool check(string s) { vector<int>num[4]; for(int i=0;i<s.size();i++) { if(s[i]=='A') { num[0].push_back(i); } else if(s[i]=='2') { num[1].push_back(i); } else if(s[i]=='3') { num[2].push_back(i); } else { num[3].push_back(i); } } return (num[0][1] - num[0][0] == 2) && (num[1][1] - num[1][0] == 3) &&( num[2][1] - num[2][0] == 4) && (num[3][1] - num[3][0] == 5); } int main() { string str="223344AA"; do { if(check(str)) { cout<<str<<endl; } }while(next_permutation(str.begin(),str.end())); } 1.2.3.4.5.6.7.8.9.10.11.12.13.14.15.16.17.18.19.20.21.22.23.24.25.26.27.28.29.30.31.32.33.34.35.36.37.38.39.40.41.42.43.44.45.46. 原创作者: u_16969274 转载于: https://blog.51cto.com/u_16969274/11813427