📅  最后修改于: 2023-12-03 14:58:34.969000             🧑  作者: Mango
本篇题目为 "门|门 CS 1997 |第 40 题",出自门⼠ CS 1997年考题,属于数据结构和算法类题目。该题目主要考察了解堆栈的数据结构,以及熟练使用python语言的能力。
给定一个字符串S,其中只包含小写字母和字符"| ",请你判断字符串S是否能被以下规则扩展:
按照以上规则,设计一个算法,判断字符串S是否符合条件。若符合条件输出 "YES",不符合条件则输出 "NO"。
一个完整的字符串符合题目的规则当且仅当满足以下条件之一:
由此,我们可以使用栈来求解该题目。首先,我们将字符串S中的每一个字符插入到栈中,当栈顶元素为' | '时,我们将该字符串分割成两个部分,分别对两个部分递归调用自身,依次判断两个部分是否符合规则。当所有的元素都被遍历过后,如果栈为空,则表示该字符串符合规则。
def match_rules(S):
if S=='':
return True
stack = []
for i in S:
if i != '|':
stack.append(i)
else:
t1 = ''.join(stack)
t2 = S.replace(t1 + '|', '')
return match_rules(t1) and match_rules(t2)
return all(map(lambda x:x.islower(), stack))
if __name__ == "__main__":
S = "ab|cd|ef"
if match_rules(S):
print("YES")
else:
print("NO")