- 逆波兰表达式求值
遇到数字入栈,遇到符号,弹出数字栈顶的前两个数字。计算结果入栈
需要注意的是先弹出来的数字是第二的数字,后弹出的数字是第一个数字,在减法、除法中不能搞混
class Solution {
public:
int evalRPN(vector<string>& tokens) {
stack<int> stk;
for(int i=0;i<tokens.size();i++)
{
string& t=tokens[i];
if(isNumber(t))
{
stk.push(atoi(t.c_str()));
} else {
int num2 = stk.top();
stk.pop();
int num1 = stk.top();
stk.pop();
switch(t[0]){
case '+':
stk.push(num1+num2);
break;
case '-':
stk.push(num1-num2);
break;
case '*':
stk.push(num1*num2);
break;
case '/':
stk.push(num1/num2);
break;
}
}
}
return stk.top();
}
bool isNumber(string& token) {
return !(token == "+" || token == "-" || token == "*" || token == "/");
}
};
- 反转字符串中的单词
倒着遍历,将空格间的字符串再反转添加进去即可
class Solution {
public:
string reverseWords(string s) {
reverse(s.begin(),s.end());
string ans;
int flag=0;
for(int i=0;i<s.size();i++)
{
if(s[i]!=' ')
{
if(flag!=0)
{
ans+=' ';
}
int j=i;
string tempStr;
while(j<s.size()&&s[j]!=' '){
flag++;
tempStr+=s[j];
j++;
}
reverse(tempStr.begin(),tempStr.end());
i=j;
ans+=tempStr;
}
}
return ans;
}
};