Given a string, compress consecutive repeated characters.
For example:
Input: "aaabbccccd"
Output: "a3b2c4d1"就是统计连续出现的相同字符,并把字符和出现次数拼起来。
例如:
aaabbccccd结果是:
a3b2c4d1拿到题之后,我先和面试官确认了一下:
如果字符只出现一次,是否也需要保留数字 1。
面试官确认需要。
之后开始写代码。
整体思路比较简单,用一个指针从左到右遍历字符串,同时记录当前字符和连续出现的次数。
只要下一个字符和当前字符相同,就继续累加。
遇到不同字符时,把:
character + count加入结果,然后重新开始统计新的字符。
最后还需要把最后一组字符加入结果。
时间复杂度是:
O(n)空间复杂度主要是最终生成的字符串。
Follow-up
代码写完以后,面试官给了几个测试:
"a"
"aaaa"
"abc"
"aabbcc"其中比较容易漏的是最后一组字符。
如果循环里只在“字符发生变化”时加入结果,那么字符串遍历结束以后,还需要单独处理最后一次统计。
之后面试官又问了一下:
What if the input string is very large?
我回答不需要额外保存整个中间数组,可以一边遍历一边构造结果,因此整体仍然只需要一次扫描。
最后跑了一遍几个 example,结果正常,这道题就结束了。
整体感受
这次 Apple 的 Coding 本身不算难,题目比较基础。
面试官主要关注的是代码是否清晰、边界条件有没有考虑完整,以及写完之后能不能快速解释自己的实现。
并不是那种特别复杂的算法题,但如果一开始没有确认输入输出规则,也很容易在小地方出错。
csoahelp
我们最近接触的 Apple、Google、TikTok、Stripe 等技术面试里,也经常遇到这种题目本身不难,但需要边写边和面试官确认细节的情况。
csoahelp 提供技术面试实时文本辅助和 Mock Interview,可以在面试过程中帮助快速整理题意、Coding 思路、边界条件以及后续追问,让整个回答过程更加顺畅。
我们也有代面试,面试辅助,OA代写等服务助您早日上岸~

