手链排序

#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;
} 

 

posted @ 2019-03-21 18:41  YFR718  阅读(119)  评论(0编辑  收藏  举报