题目描述
给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串,判断字符串是否有效。
有效字符串需满足:
- 左括号必须用相同类型的右括号闭合。
- 左括号必须以正确的顺序闭合。
- 注意空字符串可被认为是有效字符串。
示例 1:
输入: "()"
输出: true
示例 2:
输入: "()[]{}"
输出: true
示例 3:
输入: "(]"
输出: false
示例 4:
输入: "([)]"
输出: false
示例 5:
输入: "{[]}"
输出: true
示例 6:
输入: ""
输出: false
示例 7:
输入: "{"
输出: false
解题思路
- 利用堆栈先入后出的方法,将属于括号左边的括号压入栈,遇到右边的括号就提取栈中的最上层的数进行比较配对
当字符串循环完毕栈中还有数字则为无效括号class Solution { public: bool isValid(string s) { stack<char> temp; for (int i=0; i<s.length(); ++i){ if (s[i] == '(' || s[i] == '[' || s[i] == '{') temp.push(s[i]); else if (temp.empty()) return false; else if (s[i] == ')'){ if (temp.top() == '(') temp.pop(); else return false; } else if (s[i] == ']'){ if (temp.top() == '[') temp.pop(); else return false; } else if(s[i] == '}'){ if (temp.top() == '{') temp.pop(); else return false; } } if (temp.empty()) return true; else return false; } };
单引号之间只能是一个字符,表示字符;
双引号之间是字符串,可以有任意多字符,而且最后会加上一个字符串结束符 \0
stack
push
: 入栈
top
: 取栈顶元素
pop
: 出栈
empty()
: 判断栈是否为空
char
: 字符类型,用单引号’‘
,表示多个字符需要用数组char[]
string
: 字符串类型,用双引号“”