为什么这个解决方案失败?嵌套和匹配括号

时间:2014-09-15 16:30:00

标签: python regex string algorithm

我仍然未通过

测试
  • "negative_match: invalid structures,";
  • "simple_grouped: simple grouped positive and negative test, length=22";
  • "large1 simple large positive test, 100K ('s followed by 100K )'s + )(";和
  • "large2 simple large negative test, 10K+1 ('s followed by 10K )'s + )( + ()"

任何人都可以看到我的错误是什么吗?我写的代码适用于我测试过的所有字符串......

以下是对任务的描述:

  

S字符组成的字符串N被认为是正确的   如果满足以下任一条件,则嵌套:

     
      
  • S是空的;
  •   
  • S的格式为"(U)""[U]""{U}",其中U是一个正确嵌套的字符串;
  •   
  • S的格式为"VW",其中VW是正确嵌套的字符串。
  •   
     

例如,字符串"{[()()]}"已正确嵌套但"([)()]"为。{1}}   不

     

写一个函数:

     

def solution(S)

     

给定字符串S   由N个字符组成,如果1已正确嵌套,则返回S 0   除此以外。例如,给定S = "{[()()]}",函数应该   返回1并且给定S = "([)()]",该函数应返回0,如   如上所述。

     

假设:

     
      
  • N[0..200,000];
  • 范围内的整数   
  • 字符串S仅包含以下字符:"(""{""[""]""}"和/或{{ 1}}。
  •   
     

复杂性:预期的最坏情况时间复杂度为")";预期   最坏情况下的空间复杂度为O(N)(不计算所需的存储空间   输入参数)。

这是我的解决方案:

O(N)

1 个答案:

答案 0 :(得分:2)

您正在寻找从左到右从右到左 - 这将在([]{})失败 - 即使它有效,因为您会比较{{ 1}}与[。 (}start = 1


作为口头描述,我会做以下事情:

  • 创建第二个预期值字符串。 (稍后解释)
  • 当你找到一个左括号时,迭代给定的字符串以构建你的期望字符串 - 比较,只要你找到一个结束括号。

示例:给定的字符串为end = 4

{([])]
  • IF左括号for i in range(0, length): [{将预期的结束括号放在期望字符串的末尾。即(]}
  • ELSE(:= if if closing bracket):
    • 右括号匹配expactation-string中的LAST CHARACTER? - >从期望字符串中删除,继续。
    • 右括号与期望字符串中的最后一个字符不匹配? - >格式无效
    • 期望字符串为空? - >格式无效
    • 输入字符串结束,期望字符串非空? - >格式无效。

这将处理给定的字符串,如下所示:

)

编辑:由于预期的"存储复杂性"同样是i | found value | e-string before| e-string after | remark 0 | { | | } | added } 1 | ( | } | }) | added ) 2 | [ | }) | })] | added ] 3 | ] | })] | }) | last element was ] -> removed 4 | ) | }) | } | last element was ) -> removed 5 | ] | } | } | found ] but expected } -> invalid. (不计算输入参数)你会遇到Oh(n)的存储复杂性,当给定的字符串有Oh(n)左括号时没问题。但是你。应该使用第二个n然后,因为列表有开销。

对于运行时复杂性:

  • 在某个字符串位置设置值是原子的 - > string表示常量
  • Oh(1)语句是原子的 - > if()表示常量
  • 删除字符是原子的 - > Oh(1)表示常量
  • 您的for循环有Oh(1)取决于n

总结一下,你得到Oh(n)


如果您想在Python中实现此功能,可以使用http://dog-net.org/string.php来验证您的步骤"。 :-)


ps。:我没有故意提供复制和粘贴解决方案! :P