fork(1) download
  1. #include <iostream>
  2. #include <vector>
  3. #include <string>
  4. #include <stack>
  5.  
  6. using namespace std;
  7.  
  8. vector<string> braces(vector<string> inputList);
  9. bool isbracesBalanced(string braces);
  10.  
  11. int main()
  12. {
  13.  
  14. vector<string> input;
  15. input.push_back("[[(())]]");
  16. input.push_back("[[((]]");
  17. input.push_back("[[(())]]");
  18.  
  19. vector<string> output = braces(input);
  20.  
  21. for(auto s : output)
  22. {
  23. cout<<s<<endl;
  24. }
  25.  
  26. return 0;
  27. }
  28.  
  29. vector<string> braces(vector<string> inputList)
  30. {
  31. char x;
  32. vector<string> output;
  33.  
  34. for (size_t string_idx = 0; string_idx < inputList.size(); string_idx++)
  35. {
  36. bool balanced = isbracesBalanced( inputList[string_idx]);
  37. output.push_back(balanced ? "YES" : "NO");
  38. }
  39. return output;
  40. }
  41.  
  42. bool isbracesBalanced(string braces)
  43. {
  44. stack<char> bracesOrder;
  45. char topChar;
  46.  
  47. for (int idx=0; idx<braces.length(); idx++)
  48. {
  49. if (braces[idx]=='('||
  50. braces[idx]=='['||
  51. braces[idx]=='{')
  52. {
  53. bracesOrder.push(braces[idx]);
  54. continue;
  55. }
  56.  
  57. if (bracesOrder.empty())
  58. return false;
  59.  
  60. topChar = bracesOrder.top();
  61. bracesOrder.pop();
  62.  
  63. switch (braces[idx])
  64. {
  65. case ')':
  66. if (topChar=='{' || topChar=='[')
  67. return false;
  68. break;
  69.  
  70. case '}':
  71. if (topChar=='(' || topChar=='[')
  72. return false;
  73. break;
  74.  
  75. case ']':
  76. if (topChar =='(' || topChar == '{')
  77. return false;
  78. break;
  79. }
  80. }
  81.  
  82. // handle case where opening braces are bigger than enclosing
  83. return (bracesOrder.empty());
  84. }
Success #stdin #stdout 0s 15240KB
stdin
Standard input is empty
stdout
YES
NO
YES