时间复杂度O(n):遍历所有元素
空间复杂度O(n):括号都不匹配的情况下,所有元素都要同时入栈。
class Solution {public:/**** @param s string字符串* @return bool布尔型*/bool isValid(string s) {// write code here// 建立左右括号对应的哈系表unordered_map<char, char> mp{{'{', '}'}, {'[', ']'}, {'(', ')'}};stack<int> st;// 遍历括号序列中的括号for (char c : s) {// 如果是右括号且栈顶元素是哈系表中对应的左括号时,出栈// 栈为空说明存在多余右括号// 不匹配说明左右括号不匹配if (!st.empty() && mp[st.top()] == c) st.pop();// 其它情况元素入栈else st.push(c);}// 最后判断栈是否为空,如果不为空说明存在多余左括号return st.empty();}};
class Solution {public:/**** @param s string字符串* @return bool布尔型*/bool isValid(string s) {// write code here// 括号序列不合法的三种情况// 1. 左右括号不匹配// 2. 存在多余的左括号// 3. 存在多余的右括号stack<int> st;// 遍历括号序列中的括号for (char c : s) {// 当遇到左括号时入栈相对应的右括号if (c == '{') st.push('}');else if (c == '[') st.push(']');else if (c == '(') st.push(')');// 当遇到右括号时,判断是否与此时栈顶元素相同// 如果相同则出栈,不相同说明序列中存在左右不匹配的括号// 如果此时栈为空说明存在多余的右括号else if (st.empty() || st.top() != c) return false;else st.pop();}// 遍历完成后若栈不为空,说明存在多余的左括号return st.empty();}};
