程序员老鬼

进了一个失业群,才发现那些毕业于985、211的人,面试机会不断。。

最近看到一个网友吐槽,进了个失业群才发现,原来那些985、211毕业的人面试机会不断。。

Image

我看到很多评论,都表示,虽然进了好多面试,但都没能通过。🤷‍♂️

其实,这种现象蛮常见的,很多人面试不成,恰恰是因为“面试刷绩效”这种现象越来越严重,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

最后给大家分享一份不错的副业资料,点击下方公众号,回复关键字: 副业 领取,也可以链接我领取,微信:hls404