- 判断括号是否匹配:字符串中只含括号,如][],[{}], ()[]{[]}。
当遇到一个字符的时候,由两条规则判断接下去做什么(跟背法律条文一样):
a. 字符不是闭合括号,则进栈
b. 栈为空或者 字符是不匹配的左括号,就说明不合法的字符串
is_valid(self, s):
stack = []
param_map = {')':'(', ']':'[', '}':'{'}
for c in s:
if c not in param_map:
stack.append(c)
elif not stack or param_map[c] != stack.pop():
return False
return not stack
- 使用栈/队列,实现队列/栈 - 来回倒腾。push方法都一样,主要是pop和top。两个循环,第一个循环,一个个元素倒入第二个数组,但要留下最后一个元素,用作返回,所以是 length>1。然后穿插一个语句,取出最后一个元素,用作返回。接下来,第二个循环,再把所有元素倒腾回去,准备下一次pop/top
#用栈表示队列,两个循环,中间穿插有个取数
class TestStack(object):
def __init__(self):
self.stack = []
def push(self, u):
self.stack.append(u)
def pop(self):
if self.is_empty:
return None
return self.stack.pop()
@property
def length(self):
return len(self.stack)
@property
def is_empty(self):
return self.length == 0
class TestQueue:
def __init__(self):
self.stack1 = TestStack()
self.statck2 = TestStack()
def push(self, u):
self.stack1.push(u)
def pop(self):
while self.stack1.length > 1:
self.statck2.push(self.stack1.pop())
result = self.stack1.pop()
while not self.statck2.is_empty:
self.stack1.push(self.statck2.pop())
return result
网友评论