MOOC数据结构与算法Python版:有效的括号,一维开心消消乐,强迫症老板和他的洗碗工

1 篇文章 0 订阅
1 篇文章 0 订阅

1、有效的括号(10分)

题目内容:

给定一个只包括

  1.  '(',')','{','}','[',']'

的字符串,判断字符串是否有效

有效字符串需满足:

  1. 左括号必须用相同类型的右括号闭合。

  2. 左括号必须以正确的顺序闭合。

注意空字符串可被认为是有效字符串。

 

输入格式:

一行字符串

输出格式:

True或False,表示该输入是否为合法括号串

 

输入样例1:

  1. ([])

输出样例1:

  1. True

输入样例2:

  1. {{)]}

输出样例2:

  1. False

inp = input()
if not inp:
    print(True)
else:
    s = []
    d = {
        ')': '(',
        ']': '[',
        '}': '{'
    }
    flag = True
    for i in inp:
        if i in d.values():
            s.append(i)
        elif i in d.keys() and s:
            if s.pop() != d[i]:
                flag = False
                break
        else:
            flag=False
            break

    if s:
        flag=False
    print(flag)

2、一维开心消消乐(10分)

题目内容:

开心消消乐我们都熟悉,我们可以用刚学过的栈来做一个“一维”的开心消消乐游戏,这个游戏输入一串字符,逐个消去相邻的相同字符对。

如果字符全部被消完,则输出不带引号的“None”

输入格式:

一个字符串,可能带有相邻的相同字符,如“aabbbc”

输出格式:

一个字符串,消去了相邻的成对字符,如“bc”

 

输入样例1:

  1. beepooxxxyz

输出样例1:

  1. bpxyz

输入样例2:

  1. kxkx

输出样例2:

  1. kxkx

输入样例3:(这里bb被消了以后,第二个a挨上来了,所以两个a也相邻,同样消去)

  1. abbacddccc00

输出样例3:

  1. None
inp=input()
i=0
l=[]
for i in inp:
    if l==[]:
        l.append(i)
    else:
        if i==l[-1]:
            l.pop()
        else:
            l.append(i)
if l:
    print("".join(l))
else:
    print(None)

3、强迫症老板和他的洗碗工(10分)

题目内容:

洗碗工小明碰上了一位强迫症老板老王,餐厅一共就10只盘子,老板给仔细编上了0~9等10个号码,并要求小明按照从0到9的编号来洗盘子,当然,每洗好一只盘子,就必须得整齐叠放起来。

小明洗盘子期间,经常就有顾客来取盘子,当然每位顾客只能从盘子堆最上面取1只盘子离开。

老王在收银台仔细地记录了顾客依次取到盘子的编号,比如“1043257689”,这样他就能判断小明是不是遵照命令按照0123456789的次序来洗盘子了。

你也能像老王一样作出准确的判断吗?

 

输入格式:

长度为10的字符串,其中只包含0~9的数字,且不重复,代表顾客依次取到的盘子编号

输出格式:

字符串:Yes或者No,表示遵照次序洗盘子,或者没有遵照次序洗盘子

 

输入样例1:

  1. 1043257689

输出样例1:

  1. Yes

输入样例2:

  1. 4230178956

输出样例2:

  1. No
s=input()
stack = []
i = 0
j = 0
while i <= 10 and j <= 9:
    if stack and int(s[j]) == stack[-1]:
        stack.pop()
        j += 1
    else:
        stack.append(i)
        i +=1
if not stack:
    print('Yes')
else:
    print('No')

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值