进了一个失业群,才发现那些毕业于985、211的人,面试机会不断。。
最近看到一个网友吐槽,进了个失业群才发现,原来那些985、211毕业的人面试机会不断。。
我看到很多评论,都表示,虽然进了好多面试,但都没能通过。🤷♂️
其实,这种现象蛮常见的,很多人面试不成,恰恰是因为“面试刷绩效”这种现象越来越严重,HR一方面可能需要达成招聘指标,另一方面又把标准设置得非常高,甚至根本不考虑实际需要。
程序员这一行尤其如此,技术能力只是表面,实际能否适应团队、能否在快速变化的环境中做出贡献才是硬指标。【备注:文末可领最新资料】
算法题:相似字符串组
哦,知道了!那我就按你说的那种风格写出来,不用啥正式框架,也不做那些高大上的解释,尽量让它更像一个随便的聊天。
昨天跟小李聊到一个算法题,讲的是“相似字符串组”这玩意儿。说起来,简单的就是,你给一堆字符串,得把那些“看起来差不多”的字符串给分成一组。
你知道吧,像那种通过重新排列字符顺序就能变一样的字符串,它们就算是“相似”的。我举个例子,像“abc”和“bca”,是不是这俩你把字母顺序调一下就能变得一模一样?对吧,就是这个意思。
这题的关键就在于,我们得想办法把这些相似的字符串给识别出来,放到一起。然后就得思考,咋样能用最简单的方式把它们分开,能分得又快又准。
好,简单点来说,最直观的办法就是把每个字符串排序,然后看看排序后的字符串是否相同。比如,“abc”和“bca”排序后都会变成“abc”,这时候它们就可以归为一组了。你想啊,只有字符顺序不一样,其实本质上它们就是一样的。
不过,你要是能想明白这些东西,接下来就容易多了。就用哈希表把这些“标准”字符串当作键,字符串本身当作值,最后啥都解决了。像我们常说的,一键搞定,不拖泥带水。
我就直接用Java给你写个简单的代码,看怎么做:
import java.util.*;
publicclassSolution{
public List<List<String>> groupStrings(String[] strings) {
// 定义一个哈希表来存储分组
Map<String, List<String>> map = new HashMap<>();
// 遍历每个字符串
for (String str : strings) {
// 将字符串转为字符数组
char[] chars = str.toCharArray();
Arrays.sort(chars); // 排序
String sortedStr = new String(chars); // 排序后的字符串
// 如果map里没有这个排序后的字符串作为键,就新建一个
if (!map.containsKey(sortedStr)) {
map.put(sortedStr, new ArrayList<>());
}
map.get(sortedStr).add(str); // 将当前字符串添加到对应组
}
// 返回所有分组
returnnew ArrayList<>(map.values());
}
publicstaticvoidmain(String[] args){
Solution solution = new Solution();
String[] strings = {"abc", "bca", "cab", "xyz", "zyx", "az", "za"};
List<List<String>> result = solution.groupStrings(strings);
// 输出每组字符串
for (List<String> group : result) {
System.out.println(group);
}
}
}
这代码不复杂,就是按顺序把每个字符串的字母排好,再用一个哈希表把排好序的字符串作为键,原始字符串作为值存起来。最后,哈希表的值就是我们要的结果。
如果你给个这样的输入:{"abc", "bca", "cab", "xyz", "zyx", "az", "za"},结果应该是:
[["abc", "bca", "cab"], ["xyz", "zyx"], ["az", "za"]]
看,排序之后,啥都变得清晰了。相似的字符串就被分到一块,完全不麻烦。
其实,背后的逻辑就是这么简单。大概就是,先“标准化”每个字符串,让它们变成一种统一的形式,然后用哈希表来分类。效率也挺高的,关键是排序的时间复杂度稍微高一点,但也算合理了,毕竟字符串排序其实也就 O(n log n) 这样。
不过要是你字符串很多,或者有更高要求的话,咱再聊其他优化方案,嘿嘿。不过现在就这种思路,做出来也不算慢。
-END-
我为大家打造了一份RPA教程,完全免费:https://www.songshuhezi.com/rpa.html