对K个不同字符的全排列组成的数组,面试官从中随机拿走了一个,剩下的数组作为输入,请帮忙找出这个被拿走的字符串?
比如[“ABC”,"ACB",“BAC”,"CAB","CBA"]返回“BCA”
n=int(input()) din = [] for i in range(n): din.append(input()) if len(din[0]) == 2: dout = din[0][1]+din[0][0] print(dout) else: dout = '' for k in range(len(din[0])): listcur = din[0][k] for i in range(1,n): listcur = listcur+din[i][k] cnt = [listcur.count(din[0][i]) for i in range(len(din[0]))] idx = cnt.index(min(cnt)) dout = dout+din[0][idx] print(dout)
#include<iostream> #include<vector> #include<iterator> #include<string> #include<cstring> #include<map> using namespace std; int num(int k) //阶乘 { int ans=1; while(k>0) { ans*=k; --k; } return ans; } int main() { int k; cin>>k; char ans[k]; //最终输出结果 fill(ans, ans+k, 0); int n=num(k)-1; vector<string> arr_str; for(int i=0;i<n;++i) { string s; cin>>s; arr_str.push_back(s); } for(int i=0;i<k;++i) { map<char,int> map_char; map<char,int>::iterator iter; for(int j=0;j<n;++j) { char aa = arr_str[j][i]; iter = map_char.find(aa); if(iter == map_char.end()) map_char.insert(pair<char, int>(aa, 1)); else ++(iter->second); } iter = map_char.begin(); int t = iter->second; char ans1 = iter->first; while(iter!=map_char.end()) { iter++; if(iter->second < t) { t=iter->second; ans1= iter->first; break; } } ans[i]=ans1; cout<<ans1<<endl; } cout<<ans<<endl; }