部门聚餐,你们会带上外包同事吗?
有网友表示,我们开发部15个人,外加2个外包小伙伴,老实说,聚餐时他们基本不带。
原因其实挺现实——团建经费是按人头算的,外包不在预算范围内,老板压根没考虑过人家。再加上,外包同事和我们是不同公司的人,工资发放、考核啥的都分开,聚餐还真有点“外人”的意思。
不过,说实话,你真以为外包想和我们去吗?外包也不傻,去吃这顿饭图啥?图和我们强行客套“辛苦啦”“多吃点”?
说到底,聚餐本来就是“圈内人的活动”。外包同事的圈子也许比我们更舒服,人家吃自己那份好不好?
你们部门聚餐会带外包同事吗?欢迎留言聊聊!🤗
算法题:单词拆分
s
和一个单词字典 wordDict
,判断 s
能不能被拆分成一个或多个出现在字典中的单词。比如,字符串 s = "leetcode"
和字典 wordDict = ["leet", "code"]
,就能拆分,因为 "leet" 和 "code" 都在字典里。定义一个布尔数组
dp
,其中 dp[i]
表示字符串 s
的前 i
个字符是否可以被成功拆分。然后通过一个递推公式去填充整个数组,直到最终结果。import java.util.*;
public class WordBreak {
public boolean wordBreak(String s, List<String> wordDict) {
Set<String> wordSet = new HashSet<>(wordDict); // 使用Set提高查询效率
boolean[] dp = new boolean[s.length() + 1];
dp[0] = true; // 空字符串可以被成功拆分
for (int i = 1; i <= s.length(); i++) {
for (int j = 0; j < i; j++) {
// 检查 s[j:i] 是否在字典中,且 dp[j] 为真
if (dp[j] && wordSet.contains(s.substring(j, i))) {
dp[i] = true;
break;
}
}
}
return dp[s.length()];
}
}
为什么要用 Set
而不是直接用List
?
因为查找操作的效率!Set 的查找是 O(1),List 是 O(n)。想象一下你拿个电话本按页翻字典,那得多费劲!而 Set 就像是用 Ctrl+F,秒查。为什么从后往前遍历 j
?
这个倒是没啥“硬性规定”,但从后往前更符合逻辑,因为我们想知道当前这个段是否能与之前的拆分拼成完整的结果。
关于复杂度和“踩坑”
public boolean wordBreakRecursive(String s, List<String> wordDict) {
if (s.isEmpty()) return true;
for (String word : wordDict) {
if (s.startsWith(word) && wordBreakRecursive(s.substring(word.length()), wordDict)) {
return true;
}
}
return false;
}
-END-
以上,就是今天的分享了,看完文章记得右下角给何老师点赞,也欢迎在评论区写下你的留言。