当我点开 Snowflake OA 链接的那一刻,其实心里是有些没底的。90 分钟 3 道题,第二题描述有两段半,第三题又是典型的 DP 优化题,时间紧、边界多,压力比我预想的要大不少。最终我还是全部通过了,这次把我遇到的真实高频题型、完整解题思路和代码模板整理出来,希望能帮到正在准备 Snowflake 的同学,少踩一些坑。

Snowflake OA 整体情况
- 平台:HackerRank
- 时长:90 分钟
- 题量:3 道 Coding 题
- 难度:Easy-Medium + Medium + Medium-Hard
- 核心考察:动态规划、字符串处理、贪心算法、边界 case 处理
Snowflake OA 的特点是题目描述较长、边界条件苛刻、时间压力大。下面是 2025-2026 年出现频率最高的几道真题。
高频真题详解(附思路 + 代码)
1. Prime String Partition(极高频 · DP)
题目:给定一个仅由数字组成的字符串 s,将其分割成多个子串,每个子串代表的数字是质数且无前导零,求不同的分割方案总数(结果对 10^9 + 7 取模)。
解题思路:
- 预处理所有可能的质数(筛法)
- 使用 DP:dp[i] 表示前 i 个字符能形成的合法分割方案数
- 对于每个位置 i,枚举可能的分割起点 j,检查子串 s[j:i] 是否为质数
- 注意避免前导零(长度 >1 时不能以 ‘0’ 开头)
def waysToPartition(s: str) -> int:
MOD = 10**9 + 7
n = len(s)
is_prime = [False] * (n + 1)
for i in range(2, n + 1):
if all(i % j != 0 for j in range(2, int(i**0.5) + 1)):
is_prime[i] = True
dp = [0] * (n + 1)
dp[0] = 1
for i in range(1, n + 1):
for j in range(i):
if s[j] == '0' and i - j > 1:
continue
num = int(s[j:i])
if num <= n and is_prime[num]:
dp[i] = (dp[i] + dp[j]) % MOD
return dp[n]
2. Text Scoring / Prefix Match Score(高频 · 字符串)
题目:给定两个字符串 text 和 pattern,对 text 中的每个位置计算与 pattern 的前缀匹配得分(考虑前缀和后缀重叠),返回总得分。
解题思路:
- 对每个位置使用双指针或 KMP 算法计算最长匹配前缀长度
- 根据规则累加得分
- 需要注意边界和重叠情况
核心技巧:KMP 的 next 数组可以显著优化匹配过程。
3. Vowel Limit / Constrained Vowel Strings(高频 · DP)
题目:给定单词长度 n 和最大连续元音数 k,求可以使用小写字母组成多少个满足条件的合法字符串(对 10^9+7 取模)。
解题思路:
- DP 状态设计:dp[i][j] 表示长度为 i、当前连续元音数为 j 的合法字符串数量
- 转移:当前字母是辅音时 j 重置为 0,是元音时 j 递增
- 注意状态压缩可优化空间
def countVowelStrings(n: int, k: int) -> int:
MOD = 10**9 + 7
dp = [[0] * (k + 1) for _ in range(n + 1)]
dp[0][0] = 1
for i in range(1, n + 1):
for j in range(k + 1):
# 当前是辅音
dp[i][0] = (dp[i][0] + sum(dp[i-1])) % MOD
# 当前是元音
if j > 0:
dp[i][j] = (dp[i][j] + dp[i-1][j-1] * 5) % MOD
return sum(dp[n]) % MOD
4. Task Scheduling with Constraints(中高频 · 贪心/优先队列)
题目:给定一系列任务的开始时间、结束时间和优先级,求最多能同时执行的任务数,或需要的最少机器数量。
解题思路:
- 经典贪心:按结束时间排序,使用优先队列维护当前正在执行的任务结束时间
- 每次新任务到来时,弹出已结束的任务
5. String Transformation / Rotation Check(中频)
题目:判断字符串 src 是否可以通过若干次旋转操作得到 target,并求最小旋转次数(若不可能返回 -1)。
解题思路:
- 长度不同直接返回 -1
- 经典技巧:target in (src + src)
备战建议
- DP 是绝对重点:建议至少刷 15-20 道 DP 题,尤其是计数型和状态压缩 DP
- 时间管理:第一题控制在 20 分钟,第二题 25-30 分钟,第三题保证写出正确框架和主要优化
- 代码习惯:边界 case(空字符串、单字符、全相同字符等)必须处理完整
- 练习方式:HackerRank 严格 90 分钟全真模拟 + LeetCode DP/String 专题
比 LeetCode 刷题更高效的 OA 准备方式
当时准备 Snowflake OA 的时候,我参考了不少 Programhelp 整理的真实面经和高频题库。除此之外,他们还提供 OA 实战模拟、Mock Interview、 实时语音协助 ,以及高频题趋势更新。已经帮助不少学员上岸,准备其他公司也可以找他们,不少学员都拿到了 FAANG 的 offer。如果你们也正在准备 OA 或面试,不妨去了解一下,比自己闷头刷题高效很多。