首页 > 试题广场 >

对K个不同字符的全排列组成的数组,面试官从中随机拿走了一个,

[问答题]
对K个不同字符的全排列组成的数组,面试官从中随机拿走了一个,剩下的数组作为输入,请帮忙找出这个被拿走的字符串?
比如[“ABC”,"ACB",“BAC”,"CAB","CBA"]返回“BCA”
全排列每个字母在每一位都是两个,依次遍历每个index位的字符,个数为1的连起来就是了
发表于 2020-05-13 21:03:38 回复(0)
//全排列 , 递归思想:需要写一个除了第一个都交换的函数
ArrayList<String> res = new ArrayList<>();
public String solution(String[] arr,int k){
    char[] chars=arr[0].toCharArray();//获得K个不同字符,
    for(int i=0;i<k;i++){
       swap(chars,0,i);
        add(chars);//ABC
        find(chars,0,k);
}
         //比较res和arr 没有的字符串 返回;最好情况就是让生成的res是按序的,这样好比较   
    int i=0;
    for(String s : res){
        f(s!=arr[i]) return s;
        i++;
}
    return "";
}    
public void find(char[] chars,int start,int k){//希望先加自己,之后缩小规模,最后规模都加完才换首字母
    if(start==k-1) return;//最后一个没得交换
    for(int i = start+1;i<k-1;i++){
     char[] nchars=swap(chars,start+1,i+1);//ACB
    add(nchars);
    find(nchars,start+2,k);//C到头了没法交换
}
}
public char[] swap(char[] arr,int i,int j){
    char tmp = arr[i];
    arr[i] = arr[j];
    arr[j] = tmp;
    return  arr;
}
public void add(chars[] arr){
     StringBuilder sb = new StringBuilder();
    for(int i=0;i<arr.length;I++)[
        sb.append(arr[i]);
        res.add(sb.toString());//"ABC"
    }
}
发表于 2019-09-03 10:57:20 回复(0)

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)

编辑于 2019-08-24 01:52:01 回复(0)
#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;	
	
 }


发表于 2019-08-18 22:00:16 回复(0)