【发布时间】:2014-11-09 06:01:22
【问题描述】:
我仍然没有通过测试
-
"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 + )( + ()"。
谁能看到我的错误是什么?我编写的代码适用于我测试的所有字符串...
这里是任务的描述:
由
N字符组成的字符串S被认为是正确的 如果以下任一条件为真,则嵌套:
S为空;S具有"(U)"或"[U]"或"{U}"的形式,其中U是正确嵌套的字符串;S的形式为"VW",其中V和W是正确嵌套的字符串。例如,字符串
"{[()()]}"是正确嵌套的,但"([)()]"是 不是。写一个函数:
def solution(S)那个,给定一个字符串
S由N字符组成,如果S正确嵌套并且0,则返回1否则。例如,给定S = "{[()()]}",函数应该 返回1并给定S = "([)()]",该函数应返回0,如 上面解释过。假设:
N是[0..200,000]范围内的整数;- 字符串
S仅包含以下字符:"("、"{"、"["、"]"、"}"和/或")"。复杂度:预期的最坏情况时间复杂度为
O(N);预期的 最坏情况下的空间复杂度为O(N)(不包括所需的存储空间 用于输入参数)。
这是我的解决方案:
def solution(S):
# write your code in Python 2.7
if S == "":
return 1
length = len(S)
start = 0
end = length-1
if length%2 != 0:
return 0
for i in range(0, length):
if (S[start] == '(') and (S[end] != ')'):
return 0
if (S[start] == '[') and (S[end] != ']'):
return 0
if (S[start] == '{') and (S[end] != '}'):
return 0
start = start +1
end = end -1
return 1
pass
【问题讨论】:
-
扫描一个部分的第一个和最后一个字符的解决方案不适用于您的第一个案例
{[()()]},因为最后您将看到中间的字符)(. -
提示:由于正确嵌套的定义是递归的,因此使用递归实现测试器通常是最简单的。
-
由于您的算法似乎适用于您的测试字符串,您需要制作一些更复杂的测试字符串,包括正确嵌套的字符串和错误嵌套的字符串。然后用这些字符串手动“遍历”你的算法(即在纸上手工完成),看看会发生什么。现在使用 dognose 算法做同样的事情。根据我的经验,手动处理算法通常可以帮助我理解如何将其转化为代码。
标签: python regex string algorithm