对K个不同字符的全排列组成的数组,面试官从中随机拿走了一个,剩下的数组作为输入,请帮忙找出这个被拿走的字符串?
比如[“ABC”,“ACB”,“BAC”,“CAB”,“CBA”]返回“BCA”
思路:递归进行全排列,每一个排列出来的数在输入中查找是否存在。
#include<iostream>
#include<vector>
#include<string>
#include<math.h>
#include <algorithm>
using namespace std;
void permutationcore(string &s,int index,vector<string> &str)
{
if(index==s.size()-1)
{
if(find(str.begin(),str.end(),s)==str.end())
{
cout<<s<<endl;
return;
}
}
else//
{
for(int i=index;i<s.size();i++)
{
swap(s[i],s[index]);
permutationcore(s,index+1,str);
swap(s[i],s[index]);
}
}
}
void allpermutation(string s,vector<string> &str)
{
permutationcore(s,0,str);
}
int main()
{
int k;
cin>>k;
int num=1;
while(k>0)
{
num=num*k;
k--;
}
num=num-1;
vector<string> str(num);
for(int i=0;i<num;i++)//输入字符串数组
{
cin>>str[i];
}
allpermutation(str[0],str);//全排列
}