255. Verify Preorder Sequence in Binary Search Tree
class Solution(object):
def verifyPreorder(self, preorder):
if not preorder:return True
largerThan = float('-inf')
stack = []
for n in preorder:
if n < largerThan: return False
while stack and n > stack[-1]: # 这里可以改成O(1)space 不需要stack,只要比前一个大就一直往前找就行了
largerThan = stack.pop()
stack.append(n)
return True
1003. Check If Word Is Valid After Substitutions
很简单的题,一遍过。但是又是看了标签是stack的才肯定。
class Solution(object):
def isValid(self, S):
stack = []
for c in S:
stack.append(c)
cur = ''
while stack:
cur = stack.pop() + cur
if len(cur) >= 3 and cur[:3] == 'abc':
cur = cur[3:]
return not cur
402. Remove K Digits
Well, one can simply scan from left to right, and remove the first "peak" digit; the peak digit is larger than its right neighbor. One can repeat this procedure k times, and obtain the first algorithm
class Solution(object):
def removeKdigits(self, num, k):
out = []
for n in num:
while k and out and out[-1] > n:
out.pop()
k -= 1
out.append(n)
return ''.join(out[:-k or No