专栏 | 九章算法
网址 | www.jiuzhang.com
题目描述
有一个以字符串形式给出的嵌套数组,编写一个解析器使其反序列化。
数组的元素为整数或相同形式的数组。
注意:你可以认为这个字符串遵从如下规则:
字符串不为空
字符串不包含空格
字符串仅包含数字0-9,[,-,],和逗号“,”。
样例
样例一
给定字符串s = “234”,返回一个只包含一个整数234的NestedInteger对象。
样例二
给定字符串s = “[123,[456,[789]]]”,返回一个包含两个元素的NestedInteger对象:
一个整数123
一个NestedInteger的List,其中包含两个元素:
一个整数456
一个NestedInteger的List,其中包含一个元素:
一个整数789
解题思路分析
这属于一道中等难度的字符串处理问题,主要难点在于对于层次的逻辑思考,每一种情况都不能漏。
简单分析一下,此题需要一层一层进行剖析,到达最内层后结束。对于这种层次题目很明显适合两种解法,一种是用Stack,一种是递归。;两种解法只是代码写法上的区别,其实本质思想上并没有差别(Stack可以认为就是模拟递归),所以参考程序只给出了一种用Stack的解法,递归类似。
深入分析:
在字符串中如果遇到“[”符号,便需要新开一层(即需要压栈)
在字符串中如果遇到“]”符号,表示此层结束(即需要弹栈)。但是在一层结束时,因为上一层要包含弹出的这一层,所以需要将其加入到其上一层(弹栈后的栈顶)
在字符串中如果遇到“,”时,只需要处理前面是数字的情况(因为前面是数组的情况在遇到“]”时便处理过了),即把数字加入到当前层(即栈顶层)即可。
注意一个特殊情况:只包含一个数字(如样例一)的情况,需要额外处理(因为其没有任何符号)。
参考代码
面试官角度分析
这道题不难于算法,能做到不遗漏情况,各层逻辑清晰,即可得到hire。
LintCode相关练习题
推荐阅读:
- 网申时, 是否需要 cover letter (求职信) ?
- 2017年最受欢迎的编程语言有哪些?
- HR 揭秘: 10 个挂掉 Offer 的原因
- Google offer 如何谈判?听听 Google recruiter 怎么说!
- 面试遇到做过的题怎么办?
- Snapchat 面经 | LA 总部面试体验
- 面试前如何了解一家IT企业?试试官方技术博客!
- 互联网历史上最有创意的 7 份简历
- 利用 Twitter 找工作 | 如何寻找招聘信息
- Facebook 电面+Onsite面经
欢迎关注我的微信公众号:九章算法(ninechapter)。
精英程序员交流社区,定期发布面试题、面试技巧、求职信息等