
Google Software Engineer OA(Codility 平台,60 分钟,支持 Python/Java/C++)共两道编程题,本文重现题意、解析思路,并分享远程辅导体验与备考建议。
题目 1:回文重排最少修改数
题意
给定字符串 s
,每次可修改一个字符。问最少修改几次,才能将 字符重排 为回文串。
关键观察
- 要能重排成回文:最多允许一个字符出现奇数次,其他字符次数需为偶数。
- 统计有多少字符出现奇数次
odd_count
,每两种奇数次配对,仅需改动一次。
公式
cost = ⌊odd_count / 2⌋
示例
输入 "aabcd"
→ 频次 a:2 b:1 c:1 d:1 → odd_count=3 → cost=⌊3/2⌋=1
题目 2:所有子串回文重排总修改数
题意
给定字符串 dna
,枚举所有子串,对每个子串计算题目 1 中的修改成本,最后返回总和。
示例
"abca"
→ 所有子串修改成本之和 = 6"wwwww"
→ 全部本身可重排为回文,总和 = 0
暴力法复杂度
O(n³)(n² 枚举子串 × O(n) 统计频次),n ≤ 2×105 时无法接受。
优化思路
- 用前缀计数数组快速获取任意子串字符频次
- 结合滑动窗口或哈希技巧,将每个子串的 odd_count 计算降到 O(1)
- 目标复杂度:O(n²) 或更优
核心代码示例(题目 1)
from collections import Counter
def palindrome_transform_cost(s: str) -> int:
freq = Counter(s)
odd_count = sum(v & 1 for v in freq.values())
return odd_count // 2
# 测试
print(palindrome_transform_cost("aabcd")) # 1
print(palindrome_transform_cost("aaaabbbb")) # 0
远程协助体验
我通过 Programhelp 的无痕远程语音 + 联机指导模式完成 OA。考前两轮模拟:
- 多指针、贪心策略演练
- 字符串边界与输入输出细节
- Python 快速编码技巧
正式 OA 中,导师只在我卡住时通过语音给微提示,流程顺畅且不干扰思路,提升了效率与自信。
备考建议
- 刷 LeetCode Medium(数组、字符串)
- 练常见 OA 题型套题
- 多做 1v1 mock(最好有语音+联机环境)
- 练习读题速度与边界条件处理
Google OA 要求你在 30 分钟内清晰、完整地输出常见问题解法。结合专业模拟与远程辅导,能让你事半功倍!
—— 祝各位 OA 顺利
若需一对一模拟与远程指导,欢迎 联系我们。