首页 > 试题广场 >

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

[问答题]
对K个不同字符的全排列组成的数组, 面试官从中随机拿走了一个, 剩下的数组作为输入, 请帮忙找出这个被拿走的字符串?
比如[“ABC”, “ACB”, “BAC”, “CAB”, “CBA”] 返回 “BCA”
// 思路:设置一个数组用于接收每个字符串第i个位置的个数,一旦发现与其他值不一样那么就是缺少了这个字母,循环k次,得到字符
public String findStr(String[] strArray) {
    char[] charArray = strArray[0].toCharArray();
    int strArrayLen = strArray.length;
    int charArrayLen = charArray.length;
    int[] charNumArray = new int[charArrayLen];  // 实际没用到,只用了temp,和num。
    int num = 0;                                  //因为只有一个不一样,检查前后值就可以
    String retStr = "";
    for (int i = 0; i < charArrayLen; i++) {
        for (int j = 0; j < charArrayLen; j++ ){
            int temp = 0;
            for (int k = 0; k < strArrayLen; k++){
                if (strArray[k].charAt(i) == charArray[j]) {
                    temp++;
                }
            }
            if (j >= 1) {
                if (temp > num) {
                    retStr += String.valueOf(charArray[j-1]);
                    break;
                }
                if (temp < num) {
                    retStr += String.valueOf(charArray[j]);
                    break;
                }
            }
            num = temp;
            charNumArray[j] = num;
        }

    }
    return retStr;
}

编辑于 2019-08-09 16:45:52 回复(1)
#!/usr/bin/env python3.6.5
# -*- coding: UTF-8 -*-
"""
Author: yanyong
Date: 2020/10/10 20:00
docs: 

"""

#src = ['ABC','ACB','BAC','BCA','CAB','CBA']
src = input().split(',')
res = []
n = int(input())#输入一个数字,有时候也可以不要
for _ in range(n):#这里n有时候可以是具体数字
    s = input()
    if s != '':
        #temp_list = [int(j) for j in s.split()]#list int 直接得到list
        temp_list = [j for j in s.split()]#list str 直接得到list
        #print('temp_list',temp_list)
        res.append(temp_list[0])
    else:
        break
for ch in src:
    if ch not in res:
        print(ch)

发表于 2020-10-10 20:16:46 回复(0)
def hasLetters(result, letters, strs, length):
    if len(result) == length:
        if len(set(result)) == length and result not in strs:
            return result
        return None
    for letter in letters:
        temp = result.copy()
        temp.append(letter)
        tempResult = hasLetters(temp, letters, strs, length)
        if tempResult != None:
            return tempResult
    return None

num = int(input())
strs = []
for i in range(num):
    strs.append([var for var in input()])
letters = [var for var in strs[0]]
length = len(letters)

for letter in letters:
    result = []
    result += letter
    result = hasLetters(result, letters, strs, length)
    if result != None:
        break
print(''.join(result))

发表于 2019-12-24 18:59:21 回复(0)

本地测可以,利用全排列过程来判断

class Solution{
public:
    string Search(set<string> &data){
        string start_str = *data.begin();
        string res;
        Permutation(start_str, 0, start_str.length(), data, res);
        return res;
    }

    void Permutation(string &str, int start, int end, set<string> &data, string &res){
        if (start == end){
            if (data.find(str) == data.end()){
                res = str;
            }
        }
        for (int i = start; i < str.length(); i++){
            swap(str[i], str[start]);
            Permutation(str, start + 1, end, data, res);
            swap(str[i], str[start]);
        }
    }
};
发表于 2019-08-20 21:21:08 回复(0)