体面厂
临近过年,其他厂如果不像京东,大肆宣传自己落实福利到位(动辄就是 16/18/20 薪啥的),那至少也是保持沉默。
如今,一直以"体面厂"自称的安防领域龙头公司,却召开全员会,向员工们传递"寒气"。
这是打算把自封的"体面厂"称号亲手拿掉吗?
我相信,不用高管表示对未来感到悲观,员工也会感受到 🤣🤣
我还记得,两个月前,我们发文聊到"体面厂"今年校招开奖情况(普遍下降,薪资水平对比市场,属于中下游)时,有海康员工现身说法,表示"体面厂"薪水低但胜在稳定,当时组内 8 个人,现在还有 5 个在职,并且都有两套房了。
先不考虑两套房是因为"稳定",还是因为"时代红利",但至少目前这种"稳定"也开始摇摇欲坠了。
如果一个公司取消一直以来的福利传统,一定程度可以理解为是想往加大内卷力度,加大自然淘汰的方向发展。
对此,你怎么看?你司有"普调"机制吗?欢迎评论区交流。
...
回归主题。
周五,来一道简单算法题。
题目描述
平台:LeetCode
题号:890
你有一个单词列表 words
和一个模式 pattern
,你想知道 words
中的哪些单词与模式匹配。
如果存在字母的排列 p
,使得将模式中的每个字母 x
替换为 p(x)
之后,我们就得到了所需的单词,那么单词与模式是匹配的。
回想一下,字母的排列是从字母到字母的双射:每个字母映射到另一个字母,没有两个字母映射到同一个字母。
返回 words
中与给定模式匹配的单词列表。
你可以按任何顺序返回答案。
示例:
输入:words = ["abc","deq","mee","aqq","dkd","ccc"], pattern = "abb"
输出:["mee","aqq"]
解释:
"mee" 与模式匹配,因为存在排列 {a -> m, b -> e, ...}。
"ccc" 与模式不匹配,因为 {a -> c, b -> c, ...} 不是排列。
因为 a 和 b 映射到同一个字母。
提示:
哈希表
为了方便,我们用 ws
代指 words
,用 pe
代指 pattern
。
根据题意进行模拟即可,使用 map
记录具体的映射关系,使用 vis
记录哪些字符已被映射,利用字符集大小只有 ,我们可以使用数组充当哈希表。
Java 代码:
class Solution {
public List<String> findAndReplacePattern(String[] ws, String pe) {
List<String> ans = new ArrayList<>();
int[] map = new int[26], vis = new int[26];
for (String s : ws) {
Arrays.fill(map, -1);
Arrays.fill(vis, 0);
boolean ok = true;
for (int i = 0; i < pe.length() && ok; i++) {
int c1 = s.charAt(i) - 'a', c2 = pe.charAt(i) - 'a';
if (map[c1] == -1 && vis[c2] == 0) {
map[c1] = c2; vis[c2] = 1;
} else if (map[c1] != c2) ok = false;
}
if (ok) ans.add(s);
}
return ans;
}
}
C++ 代码:
class Solution {
public:
vector<string> findAndReplacePattern(vector<string>& ws, string pe) {
vector<string> ans;
vector<int> map(26, -1), vis(26, 0);
for (const auto& s : ws) {
fill(map.begin(), map.end(), -1);
fill(vis.begin(), vis.end(), 0);
bool ok = true;
for (size_t i = 0; i < pe.length() && ok; i++) {
int c1 = s[i] - 'a', c2 = pe[i] - 'a';
if (map[c1] == -1 && vis[c2] == 0) {
map[c1] = c2; vis[c2] = 1;
} else if (map[c1] != c2) ok = false;
}
if (ok) ans.push_back(s);
}
return ans;
}
};
Python 代码:
class Solution:
def findAndReplacePattern(self, ws: List[str], pe: str) -> List[str]:
ans = []
mapping, vis = [-1] * 26, [0] * 26
for s in ws:
mapping, vis = [-1] * 26, [0] * 26
ok = True
for i in range(len(pe)):
c1, c2 = ord(s[i]) - ord('a'), ord(pe[i]) - ord('a')
if mapping[c1] == -1 and vis[c2] == 0:
mapping[c1], vis[c2] = c2, 1
elif mapping[c1] != c2:
ok = False
if ok:
ans.append(s)
return ans
TypeScript 代码:
function findAndReplacePattern(ws: string[], pe: string): string[] {
const ans = [];
for (const s of ws) {
const map = new Array(26).fill(-1);
const vis = new Array(26).fill(0);
let ok = true;
for (let i = 0; i < (pe as string).length && ok; i++) {
const c1 = s.charCodeAt(i) - 'a'.charCodeAt(0), c2 = pe.charCodeAt(i) - 'a'.charCodeAt(0);
if (map[c1] === -1 && vis[c2] === 0) {
map[c1] = c2; vis[c2] = 1;
} else if (map[c1] !== c2) {
ok = false;
}
}
if (ok) ans.push(s);
}
return ans;
};
时间复杂度:,其中 代表字符集大小 空间复杂度:
最后
巨划算的 LeetCode 会员优惠通道目前仍可用 ~
使用福利优惠通道 leetcode.cn/premium/?promoChannel=acoier,年度会员 有效期额外增加两个月,季度会员 有效期额外增加两周,更有超大额专属 🧧 和实物 🎁 福利每月发放。
我是宫水三叶,每天都会分享算法知识,并和大家聊聊近期的所见所闻。
欢迎关注,明天见。