Bài 1
int baseballScore(string ops){
stack<int> record; // Stack to store the scores
for (char op : ops) {
if (op == '+') {
int prev1 = [Link]();
[Link]();
int prev2 = [Link]();
int score = prev1 + prev2;
[Link](prev1);
[Link](score);
} else if (op == 'D') {
int prev = [Link]();
int score = prev * 2;
[Link](score);
} else if (op == 'C') {
[Link]();
} else {
int score = op - '0';
[Link](score);
}
}
int sum = 0;
while (![Link]()) {
sum += [Link]();
[Link]();
}
return sum;
}
Bài 2
void push(T item) {
[Link](item);
}
T pop() {
T topItem = [Link]([Link]() - 1);
[Link]([Link]() - 1);
return topItem;
}
T top() {
return [Link]([Link]() - 1);
}
bool empty() {
return [Link]();
}
int size() {
return [Link]();
}
void clear() {
[Link]();
}
Bài 3
vector<int> nextGreater(const vector<int>& nums) {
int n = [Link]();
vector<int> result(n, -1);
stack<int> stk;
for (int i = 0; i < n; i++) {
while (![Link]() && nums[[Link]()] < nums[i]) {
result[[Link]()] = nums[i];
[Link]();
}
[Link](i);
}
return result;
}
Bài 4
int evaluatePostfix(string expression){
stack<int> operandStack;
istringstream iss(expression);
string token;
while (iss >> token) {
// Check if the token is an operator
if (token == "+" || token == "-" || token == "*" || token == "/") {
int operand2 = [Link]();
[Link]();
int operand1 = [Link]();
[Link]();
int result;
if (token == "+")
result = operand1 + operand2;
else if (token == "-")
result = operand1 - operand2;
else if (token == "*")
result = operand1 * operand2;
else if (token == "/")
result = operand1 / operand2;
[Link](result);
} else {
int operand = stoi(token);
[Link](operand);
}
}
return [Link]();
}
Bài 5
bool canEatFood(int maze[5][5], int fx, int fy){
stack<node> pathStack;
vector<vector<bool>> visited(5, vector<bool>(5, false));
// Starting node: (0, 0)
node start(0, 0);
[Link](start);
while (![Link]()) {
node current = [Link]();
[Link]();
int x = current.x;
int y = current.y;
int dir = [Link];
visited[x][y] = true;
if (x == fx && y == fy)
return true;
while (dir < 4) {
int newX = x, newY = y;
// Move in the chosen direction
if (dir == 0) // Up
newX--;
else if (dir == 1) // Left
newY--;
else if (dir == 2) // Down
newX++;
else if (dir == 3) // Right
newY++;
if (newX >= 0 && newX < 5 && newY >= 0 && newY < 5 && maze[newX][newY]
== 1 && !visited[newX][newY]) {
node next(newX, newY);
[Link] = 0; // Reset direction for the new node
[Link](next);
[Link] = dir + 1;
[Link](current);
break;
}
dir++;
}
}
// No path to the food exists
return false;
}
Bài 6
string removeDuplicates(string S){
stack<char> charStack;
for (char ch : S) {
if (![Link]() && [Link]() == ch) {
[Link]();
} else {
[Link](ch);
}
}
string result;
while (![Link]()) {
result = [Link]() + result;
[Link]();
}
return result;
}
Bài 7
vector<int> stock_span(const vector<int> &ns) {
vector<int> spans;
stack<pair<int, int>> stk;
if ([Link]()) return spans;
for (size_t i = 0; i < [Link](); i++) {
int span = 1;
while (![Link]() && [Link]().second <= ns[i]) {
span += [Link]().first;
[Link]();
}
spans.push_back(span);
[Link]({ span, ns[i] });
}
return spans;
}
Bài 8
bool isValidParentheses (string s){
stack<char> parenthesesStack;
for (char c : s) {
if (c == '(' || c == '[' || c == '{') {
[Link](c);
} else if (c == ')' || c == ']' || c == '}') {
if ([Link]()) {
return false;
}
char top = [Link]();
[Link]();
if ((c == ')' && top != '(') || (c == ']' && top != '[') || (c == '}'
&& top != '{')) {
return false;
}
}
}
return [Link]();