一、题目描述
给定一个只包括’(’,’)’,’{’,’}’,’[’,’]'的字符串,判断字符串是否有效。
有效字符串需满足:
- 左括号必须使用相同类型的右括号闭合。
- 左括号必须以正确的顺序闭合。
注意空字符串可被认为是有效字符串。
示例1:
输入:"( )"
输出: true
示例2:
输入:"( )[ ]{ }"
输出: true
示例3:
输入:"( ]"
输出: false
示例4:
输入:"( [ ) ]"
输出: false
示例5:
输入:"{ [ ] }"
输出: true
二、题解
思路:
使用栈作为辅助:
- 读到左括号,放入栈顶。
- 读到右括号,判断是否与栈顶的左括号匹配。若匹配,将栈顶的左括号弹出;若不匹配,返回false。
- 若最终栈为空,返回true。
代码:
class Solution {
public:
bool isMatch(char front, char behind)
{
if (front == '(' && behind == ')')
return true;
else if (front == '{' && behind == '}')
return true;
else if (front == '[' && behind == ']')
return true;
else
return false;
}
bool isValid(string s) {
stack<char> st;
st.push('#');
int len = int(s.size());
for (int i = 0; i < len; i++)
{
if (s[i] == '(' || s[i] == '{' || s[i] == '[')
{
st.push(s[i]);
}
else if (s[i] == ')' || s[i] == '}' || s[i] == ']')
{
char cur = st.top();
if (isMatch(cur, s[i]))
st.pop();
else
return false;
}
}
if (st.size() == 1)
return true;
else
return false;
}
};