Python技术迷

明明 35 以上的员工更稳定,为啥招聘往往都不要35 以上的?网友:你稳定了,老板就不稳了

刚看到个贴子,说35岁以上的人明明更稳定,结果招聘反而都不要。

Image

网友一句话挺扎心:“你稳定了,老板就不稳了。”——听着像玩笑,其实是现实。

Image

我觉得吧,这事的关键不在“稳定”,而在“性价比”。年轻人能熬、能学、能被压价,老板看的是投入产出比;而35+的员工,经验多、工资高、想法也多,对企业来说就是“高成本高风险”。在资本的算盘里,稳定不值钱,能立刻创造利润的才值钱。

网友的那句话没错,老板要的是“贡献值”,不是“人生伴侣”。但话说回来,职场终究是交易,谁都想多拿少给。与其抱怨不被要,不如主动提升自己的稀缺价值,让老板“不得不”要你。

总的来说,职场不相信年龄,只认价值。稳不稳都行,关键是你能不能稳出成绩、稳出价值。【备注:文末可领最新资料】

面试题:重复字符串

题目一般是这么说的: 给你一个字符串,问它是不是由某个子串重复多次构成的。 举个例子:

"abab" -> True   (因为是 "ab" + "ab")
"abcabcabc" -> True   (因为是 "abc" 重复了3次)
"abcd" -> False

也就是说你得判断,这个字符串能不能拆成多个完全一样的小块。

我第一次看到这个题,脑子里蹦出来的就是暴力法嘛。 就是一个一个长度去试,比如:

字符串长度是 n,那子串长度可能是 1, 2, 3, ..., n//2。 每次你拿出前面的那段,复制若干次,看拼起来是不是原串。

代码像这样:

defrepeatedSubstringPattern(s: str) -> bool:
    n = len(s)
for i in range(1, n // 2 + 1):
if n % i == 0:
            sub = s[:i]
if sub * (n // i) == s:
returnTrue
returnFalse

这逻辑其实挺直白的: 你先看长度是不是能整除,再验证拼接出来是不是一样的。 虽然简单粗暴,但其实也挺高效,正常数据量够用了。

后来我在面试里见过一个更巧妙的办法。 这人上来一句:“你只要判断 s 是不是在 (s + s)[1:-1] 里面出现过就行。” 当时我整个人都愣住了。

什么意思呢? 比如 s = "abab"那 s + s = "abababab"去掉头尾变成 "bababa",然后看里面有没有 "abab"。 有!那说明它确实是重复结构的。 如果没有,那就不是。

代码就一句话:

defrepeatedSubstringPattern(s: str) -> bool:
return s in (s + s)[1:-1]

为啥这招好使? 因为如果一个字符串能由某个子串重复多次组成, 那你把它翻倍后,它的中间部分一定能“拼出”自己。

第一种暴力法是 O(n²) 级别的, 因为每次拼接都要新建字符串、比较。 第二种 (s + s)[1:-1] 算法,其实本质也是 O(n),但字符串操作底层实现很快,所以表现更优。

再顺带聊个变种

有时候题目还会问:找出那个“最小重复子串”。 比如 "abcabcabc",它其实是 "abc" 的三倍。 这时候可以改成:

deffindSmallestRepeat(s: str):
    n = len(s)
for i in range(1, n // 2 + 1):
if n % i == 0and s == s[:i] * (n // i):
return s[:i]
returnNone

输入 "abcabcabc",输出 "abc"。 这就挺实用的,比如做字符串压缩、模式检测啥的。

其实这个题考的核心不是暴力不暴力,而是你能不能抓住规律。 有时候算法题看起来是数学问题,但最后变成了“字符串拼接的技巧”。 而 (s+s)[1:-1] 这个思路,就属于那种“面试官最爱看”的巧思题。

要我说,真别死抠“算法复杂度”那套,能先把直觉练出来,才是根本。 写算法有时候就像调味道,先别急着背模板,多试几次,自己脑子里过一下数据流的过程,你就能体会到为什么这样行、那样不行。

-END-

我为大家打造了一份RPA教程,完全免费:songshuhezi.com/rpa.html

🔥虎哥私藏精品🔥

虎哥作为一名老码农,整理了全网最全《python高级架构师资料合集》,总量高达650GB,点击下方公众号回复关键字 python 全部免费领