遍历字符串,如果匹配左括号,则入栈;如果匹配右括号或者栈为空则说明不是有效括号,返回false
最后如果栈为空则说明是有效括号,否则不是有效括号
1 class Solution { 2 public: 3 bool isValid(string s) { 4 stack<char> stack; 5 for(int i = 0; i < s.size(); i++){ 6 if(s[i] == '('){ 7 stack.push(')'); 8 }else if(s[i] == '['){ 9 stack.push(']'); 10 }else if(s[i] == '{'){ 11 stack.push('}'); 12 }else{ 13 if(!stack.empty() && stack.top() == s[i]) stack.pop(); 14 else return false; 15 } 16 } 17 return stack.empty(); 18 } 19 };
直接创建一个新的字符串作为栈,遍历数组,如果新数组为空或者尾部与当前相同,则出栈,否则入栈
最后返回新的数组
1 class Solution { 2 public: 3 string removeDuplicates(string s) { 4 string result; 5 for(int i = 0; i < s.size(); i++){ 6 if(result.empty() || result.back() != s[i]) 7 result.push_back(s[i]); 8 else 9 result.pop_back(); 10 } 11 return result; 12 } 13 };
遍历数组,如果是数字,则入栈,否则用栈顶的下一个元素与栈顶元素做运算,结果再次入栈
最后返回栈顶元素
1 class Solution { 2 public: 3 int evalRPN(vector<string>& tokens) { 4 stack<long long> stack; 5 for(int i = 0; i < tokens.size(); i++){ 6 if(tokens[i] == "+" || tokens[i] == "-" 7 || tokens[i] == "*" || tokens[i] == "/"){ 8 long long num1 = stack.top(); 9 stack.pop(); 10 long long num2 = stack.top(); 11 stack.pop(); 12 if(tokens[i] == "+") stack.push(num2+num1); 13 else if(tokens[i] == "-") stack.push(num2-num1); 14 else if(tokens[i] == "*") stack.push(num2*num1); 15 else stack.push(num2/num1); 16 }else{ 17 stack.push(stoll(tokens[i])); 18 } 19 } 20 return stack.top(); 21 } 22 };
浙公网安备 33010602011771号