手链排序
#include<iostream> #include<cstring> #include<algorithm> #include<vector> using namespace std; int main(){ string s="aaabbbbccccc"; vector<string> v1; int ans=0; do{//排出重复,对于v1中的每个元素进行检查 //如果存在s的旋转或翻转,则跳过 int i=0; for(;i<v1.size();++i){ if(v1[i].find(s)!=string::npos) break; } //s不可用的情况 if(i!=v1.size()) continue; string s2=s+s; v1.push_back (s2);//用于判断旋转的情况 reverse(s2.begin(),s2.end()); v1.push_back(s2); ans++; }while(next_permutation(s.begin(),s.end())); cout<<ans<<endl; return 0; }