20. 有效的括号
注意:在匹配左括号的时候,右括号先入栈,就只需要比较当前元素和栈顶相不相等就可以了,比左括号先入栈代码实现要简单的多了!
PYTHON
class Solution:
def isValid(self, s: str) -> bool:
# 输入括号为奇数
if len(s) % 2 == 1:
return False
# 字典表示括号匹配
pairs= {")":"(" , "]":"[" ,"}":"{" }
#创建栈
stack = []
# 遍历s
for i in s:
# 访问pairs的键
if i in pairs:
if not stack or stack[-1]!=pairs[i]:
return False
stack.pop()
else:
stack.append(i)
return not stack
C++
class Solution {
public:
bool isValid(string s) {
if (s.size()%2 != 0) return false; //如果s的长度为奇数 则返回false
stack<char> st;
for (int i = 0 ;i<s.size(); i++){
// 遍历到左括号则将左括号对应的右括号压入栈中
if (s[i] =='(') st.push(')');
else if (s[i]=='[') st.push(']');
else if (s[i]=='{') st.push('}');
// ||逻辑OR运算符
//如果st为空或匹配不到
else if (st.empty() || st.top() != s[i]) return false;
//st.top() == s[i] 栈弹出一个元素
else st.pop();
}
return st.empty();
}
};
1047. 删除字符串中的所有相邻重复项
class Solution:
def removeDuplicates(self, s: str) -> str:
# 递归
stack = []
for i in s:
# 若stack为空则直接将i压入栈中
if not stack or i != stack[-1]:
stack.append(i)
else:
stack.pop()
news = ''.join(stack)
return news
150. 逆波兰表达式求值
class Solution:
def evalRPN(self, tokens: List[str]) -> int:
# 设置两个栈 一个栈存放数字另一个栈存放运算操作
s_num = []
for token in tokens:
try:
s_num.append(int(token))
except:
num2 = s_num.pop()
num1 = s_num.pop()
s_num.append(self.evaluate(num1,num2,token))
return s_num[0]
def evaluate(self,num1,num2,ope):
if ope == "+":
return num1 + num2
elif ope == "-":
return num1 - num2
elif ope == "*":
return num1 * num2
# 实现向零截断的除法
elif ope == "/":
return int(num1 / float(num2))