0

一个朋友面试的问题是这样问的:

给定一个由字符 (,),{,},[,] 组成的字符串,判断其格式是否正确。

在我看来,我会回答否,因为它是一个字符串,因此需要“/”字符来打印所述字符。这是正确的还是我离谱?

4

3 回答 3

7

如果格式正确意味着每个大括号都用匹配的大括号关闭并且没有像 ({)} 这样的事件,那么我建议您使用堆栈

  1. 遍历字符串中的每个字符
  2. 如果它正在打开大括号,则将其推入堆栈
  3. 如果它是右大括号,则从堆栈中弹出并查看,如果匹配 -> 如果您遍历字符串中的所有字符并且堆栈为空,则您的字符串格式正确
于 2013-07-17T14:36:41.160 回答
2

你似乎在问面试问题是什么意思。

答案是这意味着面试官的意思。如果需要,您(或您的朋友)应该要求面试官澄清。(事实上​​,如果你要求面试官澄清,你可能会因为不问而“失分”。)

但是,一个合理的解释是,问题是要求被采访者编写一个方法来检查由这些字符组成的 String 是否具有平衡的括号;例如

    []{[]}    OK
    [         BAD
    [(])      BAD

FWIW - “格式良好的字符串”没有一般定义。相反,如果可以使用语法的产生式为字符串构造有效的分析树,则字符串被认为是关于某些语法的格式良好的。

这种情况下的问题是没有提供这样的语法(至少,这里没有)。因此,面试问题(如上所述)是不完整的/模棱两可的/只有在您准备猜测面试官的意思时才能回答。

于 2013-07-17T14:36:24.213 回答
0

正确的答案是“格式正确是什么意思?” 模糊的要求应该更具体,这表明您正在寻找正确的功能,而不是快速修复。

我们可以猜测它的含义。这可能意味着元素的正确嵌套,例如左括号和右括号遵循 xml 样式的标记语法,其中

{([)]}

不会很好地形成

它可能意味着正确转义,以便可以在字符被解释为命令的环境中打印。在这种情况下,格式良好可能意味着

\{\(\[

这甚至可能意味着一旦找到一个开始字符,唯一的合法字符就是它的结束字符。在这种情况下,以下内容将不会很好地形成。

{()}

如果格式正确仅意味着每个打开项目的一个结束项目,那么(由于定义)以下甚至可能是可以的

)(

简而言之,当您有疑问时,请询问。问是很多事情的关键,它表明你在关注和思考。这些技能比“知道答案”重要得多,因为在不理解请求的情况下知道答案会导致回答错误的问题。

于 2013-07-17T14:40:44.200 回答