问题是从左括号 '[' 到右括号 ']' 中删除内容,
我设法将其写出来,但由于输出不是问题想要的输出,因此我未能通过给我的某些测试用例。
我得到的提示是,首先找到主要的右括号']',然后追溯到最新的左括号'[',并删除从主要的右括号开始到最新的左括号的所有内容。
但是,我不知道如何写出来。任何帮助表示赞赏谢谢
我的代码如下:
def trial():
b = False
user_input = input("test cases : ")
formatstr = ""
for i in user_input:
if '[' in i:
b = True
elif not b:
formatstr += i
if ']' in i:
b = False
print(formatstr)
trial()
Run Code Online (Sandbox Code Playgroud)
这些是具有所需输出的测试用例。
其次是我的输出失败了一些测试用例
[[bean]abc ? [abc
**My Output = abc** `Testcase failed`
[bean]]abc ? ]abc
**My Ouput = ]abc** `Testcase passed`
abc[foo][qwerty] ? abc
**My Output = abc** `Testcase passed`
abc[qwerty]bean] ? abcbean]
**My Output = abcbean]** `Testcase passed`
abc[qwerty[bean] ? abc[qwerty
**My Output = abc** `Testcase failed`
bean[abc[qwe]dfg] ? bean
**My Output = beandfg]** `Testcase failed`
Run Code Online (Sandbox Code Playgroud)
您通常通过实现堆栈来处理嵌套结构。当您遇到 a 时"[",将一个项目添加到堆栈中,而当"]"您pop()从堆栈中遇到一个you 时。否则,您将添加到堆栈顶部的项目的附加。在您的示例中,您需要确保添加了实际的括号,因为测试似乎需要它们。这可能看起来像:
def trial(user_input):
groups = ['']
for i in user_input:
if i == '[':
groups.append(i)
elif i == ']' and len(groups) > 1:
groups.pop()
else:
groups[-1] += i
return "".join(groups)
assert(trial("[[bean]abc") == "[abc")
assert(trial("[bean]]abc") == "]abc")
assert(trial("abc[foo][qwerty]") == "abc")
assert(trial("abc[qwerty]bean]") == "abcbean]")
assert(trial("abc[qwerty[bean]") == "abc[qwerty")
assert(trial("bean[abc[qwe]dfg]") == "bean")
# all pass
Run Code Online (Sandbox Code Playgroud)