代码随想录算法训练营第十天| 20. 有效的括号 1047. 删除字符串中的所有相邻重复项 150. 逆波兰表达式求值

20. 有效的括号  

特点:

左括号之后,可能还会有左括号,但是只要有右括号,那么它必须立刻和最近的左括号

代码:

 1 char returnRightChar(char &c)
 2 {
 3     switch (c)
 4     {
 5     case '[': return ']';
 6     case '(': return ')';
 7     case '{': return '}';
 8     }
 9 
10     return NULL;
11 }
12 bool isValid(string s) 
13 {
14     stack<char> left;
15     
16     for (char c : s)
17     {
18         if (c == '[' || c == '(' || c == '{')
19         {
20             left.push(c);
21         }
22         else 
23         {
24             if (!left.empty()&&c == returnRightChar(left.top()))
25             {
26                 left.pop();
27             }
28             else {
29                 return false;
30             }
31             
32         }
33         
34     }
35 
36     return left.empty();
37 }

 

1047. 删除字符串中的所有相邻重复项

因为较为简单,直接贴代码:

代码:

 1 string removeDuplicates(string s) {
 2     stack<char> charStack;
 3 
 4     for (int i = 0; i < s.size(); i++)
 5     {
 6         if (!charStack.empty() && charStack.top() == s[i])
 7         {
 8             charStack.pop();
 9             continue;
10         }
11 
12         charStack.push(s[i]);
13     }
14 
15     string result;
16     while (!charStack.empty())
17     {
18         result += charStack.top();
19         charStack.pop();
20     }
21 
22     int i = 0;
23     int j = result.size() - 1;
24     while (i < j)
25     {
26         auto mid = result[i];
27         result[i] = result[j];
28         result[j] = mid;
29 
30         i++;
31         j--;
32     }
33 
34 
35     return result;
36 }

 150. 逆波兰表达式求值 

 较为简单,主要是要注意 / - 的顺序

代码

 1 int evalRPN(vector<string>& tokens) {
 2     stack<int> resultStack;
 3 
 4     for (auto token : tokens)
 5     {
 6         if (token != "+" && token != "-" && token != "*" && token != "/")
 7         {
 8             resultStack.push(stoi(token));
 9         }
10         else
11         {
12             int first = resultStack.top();
13             resultStack.pop();
14             int second = resultStack.top();
15             resultStack.pop();
16 
17             if (token == "+")
18             {
19                 resultStack.push(first + second);
20             }
21             else if (token == "-")
22             {
23                 resultStack.push(second - first);
24             }
25             else if (token == "*")
26             {
27                 resultStack.push(first * second);
28             }
29             else if (token == "/")
30             {
31                 resultStack.push(second / first);
32             }
33             
34         }
35     }
36 
37 
38     return resultStack.top();
39 }

 

posted @ 2023-06-18 15:22  博二爷  阅读(19)  评论(0编辑  收藏  举报