链接:https://www.nowcoder.com/questionTerminal/e83dc4eef5734710b3bc53000f9f0f5d?f=discussion
来源:牛客网
对K个不同字符的全排列组成的数组, 面试官从中随机拿走了一个, 剩下的数组作为输入, 请帮忙找出这个被拿走的字符串?
比如[“ABC”, “ACB”, “BAC”, “CAB”, “CBA”] 返回 “BCA”
输入描述:
第一行输入整数n,表示给定n个字符串。(n == x!-1,2<=x<=10) 以下n行每行输入一个字符串。
输出描述:
输出全排列缺少的字符串。
示例1
输入
5 ABC ACB BAC CAB CBA
输出
BCA
分析:n个数的全排列总共有种(n为字符个数),其中每种字符出现在每个位置的次数均为偶数次,因此考虑对所有字符串异或运算,留下的就是答案。
#include<iostream>
#include<cstring>
using namespace std;
int main()
{
int n;
char str[100]={0};
char s[100]={0};
cin>>n;
cin>>str;
int len = strlen(str);
if(n==1)
{
for(int i = 0; i < len; i++)
{
s[i] = str[len-i-1];
}
cout<<s<<endl;
return 0;
}
for(int i = 1; i < n; i++)
{
cin>>s;
for(int j = 0; j < len; j++)
{
str[j] = str[j] ^ s[j];
}
}
cout<<str<<endl;
return 0;
}