- 题目描述:有效的括号
给定一个只包括 '(',')','{','}','[',']' 的字符串,判断字符串是否有效。
有效字符串需满足:
左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。
注意空字符串可被认为是有效字符串。
示例 1:
输入: "()"
输出: true
示例 2:
输入: "()[]{}"
输出: true
示例 3:
输入: "(]"
输出: false
示例 4:
输入: "([)]"
输出: false
示例 5:
输入: "{[]}"
输出: true
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/valid-parentheses
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
- C++编程实现:
算法:
(1)初始化栈 S。
(2)一次处理表达式的每个括号。
(3)如果遇到开括号,我们只需将其推到栈上即可。这意味着我们将稍后处理它,让我们简单地转到前面的 子表达式。
(4)如果我们遇到一个闭括号,那么我们检查栈顶的元素。如果栈顶的元素是一个 相同类型的 左括号,那么我们将它从栈中弹出并继续处理。否则,这意味着表达式无效。
(5)如果到最后我们剩下的栈中仍然有元素,那么这意味着表达式无效。
作者:LeetCode
链接:https://leetcode-cn.com/problems/valid-parentheses/solution/you-xiao-de-gua-hao-by-leetcode/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
方法一:
class Solution {
public:
bool isValid(string s) {
if (s.empty()) {
return true;
}
if (s.size()%2)
return false;
map<char, char> sMap = {{')', '('},
{'}', '{'},
{']', '['}};
stack<char> st;
for (int i = 0; i < s.size(); i++) {
if (st.empty()) {
st.push(s[i]);
}
else
{
if (sMap[s[i]] != st.top())
{
st.push(s[i]);
}
else
{
st.pop();
}
}
if (st.size() > s.size() / 2) {
return false;
}
}
return st.empty();
}
};
方法二:
class Solution {
public:
int get_pos(vector<char> svec, char str)
{
for(int i=0; i<svec.size(); i++)
{
if(str == svec[i])
return i;
}
return 1000;
}
bool isValid(string s) {
vector<char> s1 = {'(', '[', '{'};
vector<char> s2 = {')', ']', '}'};
if (count(s2.begin(), s2.end(), s[0]) != 0)
return false;
if (s.size() % 2 != 0)
return false;
stack<char> res;
int start = 0;
char top;
while(start < s.size())
{
if (count(s1.begin(), s1.end(), s[start]) != 0)
{
res.push(s[start]);
start++;
continue;
}
else if (count(s2.begin(), s2.end(), s[start]) != 0)
{
if (res.empty())
return false;
top = res.top();
if (get_pos(s1, top) != get_pos(s2, s[start]))
return false;
else
{
res.pop();
start++;
}
}
}
if (res.empty())
return true;
else
return false;
}
};
作者:su-ge
链接:https://leetcode-cn.com/problems/valid-parentheses/solution/c-zhan-de-jian-dan-shi-xian-yi-dong-by-su-ge/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。