BalancedBrackets.cpp 2.01 KB
   1
   2
   3
   4
   5
   6
   7
   8
   9
  10
  11
  12
  13
  14
  15
  16
  17
  18
  19
  20
  21
  22
  23
  24
  25
  26
  27
  28
  29
  30
  31
  32
  33
  34
  35
  36
  37
  38
  39
  40
  41
  42
  43
  44
  45
  46
  47
  48
  49
  50
  51
  52
  53
  54
  55
  56
  57
  58
  59
  60
  61
  62
  63
  64
  65
  66
  67
  68
  69
  70
  71
  72
  73
  74
  75
  76
  77
  78
  79
  80
  81
  82
  83
  84
  85
  86
  87
  88
  89
  90
  91
  92
  93
  94
  95
  96
  97
  98
  99
 100
 101
 102
 103
//
// Created by ronal on 2/12/2023.
// Problem Description Link.
// https://www.hackerrank.com/challenges/ctci-balanced-brackets/problem

#include <bits/stdc++.h>

using namespace std;

string ltrim(const string &);
string rtrim(const string &);

/*
* Complete the 'isBalanced' function below.
*
* The function is expected to return a STRING.
* The function accepts STRING expression as parameter.
*/

string isBalanced(string str) {
stack<char> pilha;
char c;

for(int i = 0; i < str.size(); i++){
if(str[i] == '(' || str[i] == '[' || str[i] == '{'){
pilha.push(str[i]);
continue;
}

if(pilha.empty()){
return "NO";
}else if(str[i] == ')'){
c = pilha.top();
pilha.pop();
if(c == '[' || c == '{'){
return "NO";
}
}else if( str[i] == ']'){
c = pilha.top();
pilha.pop();
if(c == '(' || c == '{'){
return "NO";
}
}else if(str[i] == '}'){
c = pilha.top();
pilha.pop();
if(c == '(' || c == '['){
return "NO";
}
}

}
if(pilha.empty()){
return "YES";
}else{
return "NO";
}
}

int main()
{
ofstream fout(getenv("OUTPUT_PATH"));

string t_temp;
getline(cin, t_temp);

int t = stoi(ltrim(rtrim(t_temp)));

for (int t_itr = 0; t_itr < t; t_itr++) {
string expression;
getline(cin, expression);

string res = isBalanced(expression);

fout << res << "\n";
}

fout.close();

return 0;
}

string ltrim(const string &str) {
string s(str);

s.erase(
s.begin(),
find_if(s.begin(), s.end(), not1(ptr_fun<int, int>(isspace)))
);

return s;
}

string rtrim(const string &str) {
string s(str);

s.erase(
find_if(s.rbegin(), s.rend(), not1(ptr_fun<int, int>(isspace))).base(),
s.end()
);

return s;
}