Facebook面试题 | 迷你解析器

专栏 | 九章算法
网址 | www.jiuzhang.com程序员

题目描述面试

有一个以字符串形式给出的嵌套数组,编写一个解析器使其反序列化。
数组的元素为整数或相同形式的数组。
注意:你能够认为这个字符串听从以下规则:
字符串不为空
字符串不包含空格
字符串仅包含数字0-9,[,-,],和逗号“,”。算法

样例编程

样例一
给定字符串s = “234”,返回一个只包含一个整数234的NestedInteger对象。数组

样例二
给定字符串s = “[123,[456,[789]]]”,返回一个包含两个元素的NestedInteger对象:
一个整数123
一个NestedInteger的List,其中包含两个元素:
一个整数456
一个NestedInteger的List,其中包含一个元素:
一个整数789微信

解题思路分析编程语言

这属于一道中等难度的字符串处理问题,主要难点在于对于层次的逻辑思考,每一种状况都不能漏。post

简单分析一下,此题须要一层一层进行剖析,到达最内层后结束。对于这种层次题目很明显适合两种解法,一种是用Stack,一种是递归。;两种解法只是代码写法上的区别,其实本质思想上并无差异(Stack能够认为就是模拟递归),因此参考程序只给出了一种用Stack的解法,递归相似。ui

深刻分析:
在字符串中若是遇到“[”符号,便须要新开一层(即须要压栈)
在字符串中若是遇到“]”符号,表示此层结束(即须要弹栈)。可是在一层结束时,由于上一层要包含弹出的这一层,因此须要将其加入到其上一层(弹栈后的栈顶)
在字符串中若是遇到“,”时,只须要处理前面是数字的状况(由于前面是数组的状况在遇到“]”时便处理过了),即把数字加入到当前层(即栈顶层)便可。
注意一个特殊状况:只包含一个数字(如样例一)的状况,须要额外处理(由于其没有任何符号)。3d

参考代码

www.jiuzhang.com/solutions/m…

面试官角度分析

这道题不难于算法,能作到不遗漏状况,各层逻辑清晰,便可获得hire。

LintCode相关练习题

www.lintcode.com/en/problem/…


推荐阅读:



欢迎关注个人微信公众号:九章算法(ninechapter)。
精英程序员交流社区,按期发布面试题、面试技巧、求职信息等

九章算法,IT教育领域的深耕者
九章算法,IT教育领域的深耕者
相关文章
相关标签/搜索