面得最久的一次,一共一个半小时,java基础,jvm,集合,spring,mybatis,数据库,Linux,计网都有涉及下面是手撕题一开始是这道题/*重构字符串给定一个字符串 s ,检查是否能重新排布其中的字母,使得两相邻的字符不同。返回 s 的任意可能的重新排列。若不可行,返回空字符串 "" 。示例 1:输入: s = "aab"输出: "aba"示例 2:输入: s = "aaab"输出: "" 提示:1 <= s.length <= 500s 只包含小写字母*/感觉短时间内写不出来,然后问面试官能不能换题,面试官换了一题之后才写出来的下面是换过的题/*公共字符按ASCII码升序输出所有符合要求的字符; 如果没有符合要求的字符,则输出空列表[]。样例1输入:2 ["aabbccFFFFx2x2", "aaccddFFFFx2x2", "aabcdFFFFx2x2"]输出:["2", "F", "a", "x"]解释:字符 a 在三个字符串中都出现 2次,符合要求;字符 b 在第二三个字符串中分别出现 0次、1次,不符合要求;字符 c 在第三个字符串中出现 1次,不符合要求;字符 d 在第三个字符串中出现 1次,不符合要求;字符 F 在三个字符串中都出现了 4 次,符合要求;字符 x 在三个字符串中都出现了 2 次,符合要求;字符 2 在三个字符串中都出现了 2 次,符合要求;因此字符 a、F、x、2符合要求,按ASCII码升序输出 */代码实现public class Test { static char[] commonChars(int count, List<String> strings) { int[][] counts = new int[strings.size()][128]; //记录每个字符出现的次数 for(int i = 0; i < strings.size(); i++) { String tmp = strings.get(i); char[] charArray = tmp.toCharArray(); //记录当前字符串所有字符出现的次数 for(int j = 0; j < charArray.length; j++) { counts[i][charArray[j]]++; } } //定义变量记录符合条件的字符个数 int resCount = 0; List<Character> res = new ArrayList<>(); for(int j = 0; j < 128; j++) { //判断当前字符是否符合次数要求 boolean state = true; for(int i = 0; i < strings.size();i++) { if(counts[i][j] < count) { state = false; break; } } if(state) { resCount++; res.add((char)(j)); } } char[] resArr = new char[resCount]; for(int i = 0; i < resCount; i++) { resArr[i] = res.get(i); } return resArr; } public static void main(String[] args) { int k = 2; List<String> strings = new ArrayList<>(); strings.add("aabbccFFFFx2x2"); strings.add("aaccddFFFFx2x2"); strings.add("aabcdFFFFx2x2"); char[] res = commonChars(k, strings); Arrays.sort(res); for(char c:res) { System.out.print(c + " "); } }}