做leetcode记录
题目链接:leetcode 20.有效的括号
一、思路
- 因为括号必须成对出现才能算有效括号,因此字符串的长度必须是2n。
- 用栈来解决这个问题。遍历字符串,如果是左括号则入栈,如果是右括号就与栈顶的元素比较,如果是"()“或”[]“或”{}",就出栈,否则左括号和右括号不是同一种类型,返回false。遍历完string后,如果栈内为空,说明所有的括号都是有效的,返回true,否则返回false。
二、视频
三、代码
class Solution {
public:
bool isValid(string s) {
//string s的长度必须是偶数,如果是奇数就返回false
if(s.size() % 2 == 1) return false;
stack<char> save;
for(char c : s)
{
if(c == '(' || c == '[' || c == '{') //如果是左括号则入栈
{
save.push(c);
}
else if(!save.empty() && save.top() == '(' && c == ')') save.pop();
else if(!save.empty() && save.top() == '[' && c == ']') save.pop();
else if(!save.empty() && save.top() == '{' && c == '}') save.pop();
else save.push(c); //左括号和右括号不是同一种类型,返回false
}
return save.empty(); //如果栈内为空,说明所有的括号都是有效的,返回true,否则返回false
}
};