當我點開 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 或面試,不妨去了解一下,比自己悶頭刷題高效很多。