- 题目链接: 20. 有效的括号.
个人题解如下:
class Solution
{
public:
bool isValid(string s)
{
if ((s.size() % 2) != 0)
{
return 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(']');
}
else if (st.empty() || s[i] != st.top())
{
return false;
}
else
{
st.pop();
}
}
return st.empty();
}
};
- 题目链接: 1047. 删除字符串中的所有相邻重复项.
个人题解如下:
class Solution
{
public:
string removeDuplicates(string str)
{
stack <char> st;
for (char s:str)
{
if (st.empty() || st.top() != s)
{
st.push(s);
}
else
{
st.pop();
}
}
string result = "";
while(!st.empty())
{
result += st.top();
st.pop();
}
reverse(result.begin(), result.end());
return result;
}
};
- 题目链接: 150. 逆波兰表达式求值.
个人题解如下:
class Solution
{
public:
int evalRPN(vector<string>& tokens)
{
stack <long long> st;
for (int i = 0; i < tokens.size(); i ++)
{
if ((tokens[i] == "+") || (tokens[i] == "-") || (tokens[i] == "*")
|| (tokens[i] == "/"))
{
long long num1 = st.top();
st.pop();
long long num2 = st.top();
st.pop();
if (tokens[i] == "+") st.push(num2 + num1);
if (tokens[i] == "-") st.push(num2 - num1);
if (tokens[i] == "*") st.push(num2 * num1);
if (tokens[i] == "/") st.push(num2 / num1);
}
else
{
st.push(stoll(tokens[i]));
}
}
int result = st.top();
st.pop();
return result;
}
};