俩模拟题,细心一点即可:D
Reverse Words in a String
Total Accepted: 28683
Total Submissions: 204143
My Submissions
Given an input string, reverse the string word by word.
For example,
Given s = "the sky is blue
",
return "blue is sky the
".
class Solution {
public:
void reverseWords(string &s) {
string ans;
int j = s.size();//end of word, exclusive
for (int i = s.size() - 1; i >= 0; i--) {
if (isspace(s[i])) {
if (i != j - 1) {
copyWord(ans, s, i + 1, j);
}
j = i;
}
}
if (!isspace(s[0])) {
copyWord(ans, s, 0, j);
}
s = ans;
}
void copyWord(string &dst, string src, int i, int j) {
if (dst.size() != 0) {
dst += ' ';
}
for (int k = i; k < j; k++) {
dst += src[k];
}
}
};
Evaluate the value of an arithmetic expression in Reverse Polish Notation.
Valid operators are +
, -
, *
, /
. Each operand may be an integer or another expression.
Some examples:
["2", "1", "+", "3", "*"] -> ((2 + 1) * 3) -> 9 ["4", "13", "5", "/", "+"] -> (4 + (13 / 5)) -> 6
class Solution {
public:
int evalRPN(vector<string> &tokens) {
int i = 0;
while (i < tokens.size()) {
if (isOperator(tokens[i])) {
i -= 2;
string t = eval(tokens[i], tokens[i + 1], tokens[i + 2]);
tokens.erase(tokens.begin() + i, tokens.begin() + i + 3);
tokens.insert(tokens.begin() + i, t);
}
++i;
}
if (tokens.size() != 0)
return atoi(tokens[0].c_str());
else
return -1;//error
}
bool isOperator(string s) {
if (s == "+" or s == "-" or s == "*" or s == "/")
return true;
return false;
}
string eval(string num1, string num2, string op) {
int n1 = atoi(num1.c_str());
int n2 = atoi(num2.c_str());
char ch = op[0];
int ans;
switch(ch) {
case '+':
ans = n1 + n2;
break;
case '-':
ans = n1 - n2;
break;
case '*':
ans = n1 * n2;
break;
case '/':
ans = n1 / n2;
break;
}
stringstream ss;
string str;
ss << ans;
ss >> str;
return str;
}
};