手链问题(循环,翻转算作一种的排列问题)
#include <stdio.h> #include<iostream> #include<string> #include<algorithm> #include<vector> using namespace std; int main() { string s="aaabbbbccccc"; vector <string>v; int ans=0; do{ int i; for( i=0;i<v.size();i++){ if(v[i].find(s)!=string::npos)break;//if has this string,break string::npos是一个常数,当字符串中不存在目标字符串时返回 } if(i==v.size())//do not find s { string s1=s+s; v.push_back(s1); reverse(s1.begin(),s1.end());//注意此处是将拼接后的字符串进行翻转 v.push_back(s1); ans++; } } while(next_permutation(s.begin(),s.end())); cout<<ans; }