注意:!!当字符串的某一字符为 )}  ] 时要先判断栈st是否为空,若为空则返回false,否则st.pop()时容易造成指针溢出报错。

class Solution {
public:
bool isValid(string s) {
if(s.empty())
return true;
stack<char> st;
for(auto a : s){
if(a=='(' || a=='['|| a=='{')
st.push(a);
else
{
if(st.empty()) //注意判断栈是否为空,否则st.pop()会导致内存泄漏
return false;
else if(a==')')
{
if(st.top()== '(')
st.pop();
else
return false;
}
else if(a=='}'){
if(st.top() == '{')
st.pop();
else
return false;
}
else{
if(st.top()== '[')
st.pop();
else
return false;
}
}
} if(st.empty())
return true;
else
return false;
}
};
class Solution {
public:
bool isValid(string s) {
stack<char> st;
for(int i=; i<s.size(); i++){
if(s[i] == '(' || s[i] == '{'|| s[i] == '[')
st.push(s[i]);
else{
//不要忘记判断边界条件
if(st.size() == )
return false; char c = st.top();
st.pop(); char match;
if(s[i]==')')
match = '(';
else if(s[i]=='}')
match = '{';
else
{
assert(s[i]==']');
match = '['; }
if(c != match)
return false;
}
}
if(st.size() != )
return false;
return true;
} };

思路:从前往后遍历数组,遇到数字则压入栈中,遇到符号则把栈顶的两个数字拿出来做运算,把结果再压入栈中,直到遍历完整个数组,栈顶数字就是答案。

class Solution {
public:
int evalRPN(vector<string>& tokens) {
if(tokens.size()==)
return stoi(tokens[]); //string to int
stack<int> st;
for(int i=; i<tokens.size(); i++){
if(tokens[i] != "+" && tokens[i] != "-" && tokens[i] != "*" && tokens[i] != "/")
st.push(stoi(tokens[i]));
else
{
int num1 = st.top();
st.pop();
int num2 = st.top();
st.pop(); if(tokens[i] == "+")
st.push(num1 + num2);
else if(tokens[i] == "-")
st.push(num2 - num1);
else if(tokens[i] == "*")
st.push(num2 * num1);
else{
assert(tokens[i] == "/");
st.push(num2 / num1);
} } }
return st.top();
}
};

.. 回退一个目录

思路:使用stringstream来分割字符串,使用字符串t来保存每一段,然后分布处理:当中间是“.”就要直接去掉;多个“/”只保留一个;“..”是回退上一级的意思,即若栈不为空,弹出栈顶元素;最后,将符合要求的字符串压入栈。

class Solution {
public:
string simplifyPath(string path) {
string res, t;
stringstream ss(path);
vector<string> v; while(getline(ss,t,'/')){ //以 / 来分割ss,获得的字符串赋给t
if(t == "" || t == ".") continue; //跳出本次循环,执行下一个循环
else if(t != ".." )
v.push_back(t);
else if(!v.empty())
v.pop_back();
} for(string s:v)
res += "/" + s;
return res.empty() ? "/" : res;
}
};

栈 - 20 Valid Parentheses, 150 Evaluate Reverse Polish Notation的更多相关文章

  1. 【LeetCode】150. Evaluate Reverse Polish Notation 解题报告(Python)

    [LeetCode]150. Evaluate Reverse Polish Notation 解题报告(Python) 标签: LeetCode 题目地址:https://leetcode.com/ ...

  2. 150. Evaluate Reverse Polish Notation - LeetCode

    Question 150. Evaluate Reverse Polish Notation Solution 2 1 + 3 * 是((2+1)*3)的后缀(postfix)或逆波兰(reverse ...

  3. 【LeetCode】150. Evaluate Reverse Polish Notation

    Evaluate Reverse Polish Notation Evaluate the value of an arithmetic expression in Reverse Polish No ...

  4. 【刷题-LeetCode】150 Evaluate Reverse Polish Notation

    Evaluate Reverse Polish Notation Evaluate the value of an arithmetic expression in Reverse Polish No ...

  5. leetcode 150. Evaluate Reverse Polish Notation ------ java

    Evaluate the value of an arithmetic expression in Reverse Polish Notation. Valid operators are +, -, ...

  6. 150. Evaluate Reverse Polish Notation逆波兰表达式

    [抄题]: Evaluate the value of an arithmetic expression in Reverse Polish Notation. Valid operators are ...

  7. [LeetCode] 150. Evaluate Reverse Polish Notation 计算逆波兰表达式

    Evaluate the value of an arithmetic expression in Reverse Polish Notation. Valid operators are +, -, ...

  8. 力扣算法题—150. Evaluate Reverse Polish Notation

      Evaluate the value of an arithmetic expression in Reverse Polish Notation. Valid operators are +,  ...

  9. LeetCode OJ 150. Evaluate Reverse Polish Notation

    Evaluate the value of an arithmetic expression in Reverse Polish Notation. Valid operators are +, -, ...

随机推荐

  1. 使用Apache IO库操作IO与文件

    --------------siwuxie095                         首先到 Apache官网 下载相关的库文件     Apache官网:http://www.apach ...

  2. C++——STL之vector, list, deque容器对比与常用函数

    STL 三种顺序容器的特性对比: vector 可变数组,内存空间是连续的,容量不会进行缩减.支持高效随机存取,即支持[]和at()操作.尾部插入删除效率高,其他位置插删效率较低: list 双向链表 ...

  3. win32多线程(三) 死锁

    任何时候当一段代码需要两个(或更多)资源时,都有潜在性的死锁. void SwapLists(List *list1, List *list2) { List *tmp_list; EnterCrit ...

  4. Luogu 3066 [USACO12DEC]逃跑的BarnRunning Away From…

    好像是某CF的题,不记得…… 很套路的题,但是觉得可以做一下笔记. 倍增 + 差分. 有一个比较简单的思路就是每一个点$x$向上走一走,直到走到一个点$y$使总路程恰好不超过超过了$L$,然后把$(x ...

  5. 第16章-使用Spring MVC创建REST API

    1 了解REST 1.1 REST的基础知识 REST与RPC几乎没有任何关系.RPC是面向服务的,并关注于行为和动作:而REST是面向资源的,强调描述应用程序的事物和名词. 为了理解REST是什么, ...

  6. (转)jQuery基础之选择器

    原文地址: http://www.cnblogs.com/webmoon/p/3169360.html 选择器是jQuery的根基,在jQuery中,对事件处理.遍历DOM和Ajax操作都依赖于选择器 ...

  7. python -Tkinter 实现一个小计算器功能

    文章来源:http://www.cnblogs.com/Skyyj/p/6618739.html 本代码是基于python 2.7的 如果是对于python3.X  则需要将 tkinter 改为Tk ...

  8. poj1860 Currency Exchange(spfa判断正环)

    Description Several currency exchange points are working in our city. Let us suppose that each point ...

  9. Stomp与Jackson

    读取Stomp消息的类在StompDecoder中,org.springframework.messaging.simp.stomp.StompDecoder. Jackson把json转对象是在如下 ...

  10. Effective Java笔记

    chapter 1 java支持四种类型:interface,class,array,primitive(基本类型) chapter 2 创建对象方式: ①构造器 ②静态工厂方法代替构造器:名称可以按 ...