对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; }
#!/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)
本地测可以,利用全排列过程来判断
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]); } } };