前阵子整理面试笔记,翻到 LeetCode 551 这题 Student Attendance Record I,顺手又把当时准备 Pinterest 算法面的时候思路捋了捋。题不难:给个只包含 A、L、P 的字符串,A 代表缺勤,L 是迟到,P 正常;要求 A 少于 2 个,且不能有连续三个 L,满足就返回 true。看着像签到题,但真写面试里,边界一点儿没注意就翻车。题目在 LeetCode 551,我习惯先确认输入会不会空字符串,会不会出现别的字符,确定没问题再动手写。
我一般在家里 Coquitlam 刷的时候,先写最简单的 Python:def checkRecord(self, s): return s.count('A') < 2 and 'LLL' not in s。这写法时间复杂度 O(n),空间 O(1)。面试官要是不满意不用内置函数,就写个循环扫一遍,维护 A 的数和当前连续 L,遇到 P 或 A 连续 L 清零,一旦 a_count >= 2 或 consec_l >= 3 就 false。
例子挺好记的:PPALLP 返回 true,PPALLL false,AA 也 false。面试的时候别急着直接甩一行代码,先说清规则,“A 最多一个,不能有连续三个 L”,代码写好跑几个边界测试。Pinterest 招聘信息我也只看官方 Pinterest Careers,具体轮次团队啥的别听网上那些“内部爆料”,看看心理准备就行。
这题放在算法面里,更多考你沟通和边界感,不是考你背没背过。我一般先写用内置函数的版本,再问面试官要不要展开成循环版;时间够的话两个都写上,思路显得完整点。你们遇到这种简单题是直接一行带过,还是老老实实写循环啊?