#include <iostream>
#include <string>
#include <vector>
using namespace std;
bool hasRightPair(const string & longString, size_t pos)
{
int pairCounter=0;
for (int i = pos;i< longString.size(); i++)
{
if (longString[i] == '[')
pairCounter++;
if (longString[i] == ']')
pairCounter--;
if (!pairCounter)
return true;
}
return !pairCounter;
}
bool hasLeftPair(const string & longString, size_t pos)
{
int pairCounter = 0;
for (int i = pos ;i>=0 ; i--)
{
if (longString[i] == '[')
pairCounter++;
if (longString[i] == ']')
pairCounter--;
if (!pairCounter)
return true;
}
return !pairCounter;
}
void CompareFunc(const string & longString)
{
for (size_t i = 0; i < longString.size(); i++)
{
if (longString[i] == '[')
{
if (!hasRightPair(longString, i))
cout << i <<" ";// << " ";
}
if (longString[i] == ']')
{
if (!hasLeftPair(longString, i))
cout << i << " ";// << " ";
}
}
cout << endl;
}
int main()
{
vector<string> example({
"a[[[b]c",
"a[[b]]c",
"a[b]]]c",
"abc[[ab]111",
"[a][b]c]]][[c[c]["
});
for (string str : example)
CompareFunc(str);
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8c3RyaW5nPgojaW5jbHVkZSA8dmVjdG9yPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKCmJvb2wgaGFzUmlnaHRQYWlyKGNvbnN0IHN0cmluZyAmIGxvbmdTdHJpbmcsIHNpemVfdCBwb3MpCnsKCWludCBwYWlyQ291bnRlcj0wOwoJZm9yIChpbnQgaSA9IHBvcztpPCBsb25nU3RyaW5nLnNpemUoKTsgaSsrKQoJewkJCgkJaWYgKGxvbmdTdHJpbmdbaV0gPT0gJ1snKQoJCQlwYWlyQ291bnRlcisrOwoJCWlmIChsb25nU3RyaW5nW2ldID09ICddJykKCQkJcGFpckNvdW50ZXItLTsKCQlpZiAoIXBhaXJDb3VudGVyKQoJCQlyZXR1cm4gdHJ1ZTsKCX0KCXJldHVybiAhcGFpckNvdW50ZXI7Cn0KCmJvb2wgaGFzTGVmdFBhaXIoY29uc3Qgc3RyaW5nICYgbG9uZ1N0cmluZywgc2l6ZV90IHBvcykKewoJaW50IHBhaXJDb3VudGVyID0gMDsKCWZvciAoaW50IGkgPSBwb3MgO2k+PTAgOyBpLS0pCgl7CgkJaWYgKGxvbmdTdHJpbmdbaV0gPT0gJ1snKQoJCQlwYWlyQ291bnRlcisrOwoJCWlmIChsb25nU3RyaW5nW2ldID09ICddJykKCQkJcGFpckNvdW50ZXItLTsKCQlpZiAoIXBhaXJDb3VudGVyKQoJCQlyZXR1cm4gdHJ1ZTsKCX0KCXJldHVybiAhcGFpckNvdW50ZXI7Cn0KCnZvaWQgQ29tcGFyZUZ1bmMoY29uc3Qgc3RyaW5nICYgbG9uZ1N0cmluZykKewoJZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsb25nU3RyaW5nLnNpemUoKTsgaSsrKQoJewoJCWlmIChsb25nU3RyaW5nW2ldID09ICdbJykKCQl7CgkJCWlmICghaGFzUmlnaHRQYWlyKGxvbmdTdHJpbmcsIGkpKQoJCQkJY291dCA8PCBpIDw8IiAiOy8vIDw8ICIgIjsKCQl9CgkJaWYgKGxvbmdTdHJpbmdbaV0gPT0gJ10nKQoJCXsKCQkJaWYgKCFoYXNMZWZ0UGFpcihsb25nU3RyaW5nLCBpKSkKCQkJCWNvdXQgPDwgaSA8PCAiICI7Ly8gPDwgIiAiOwoJCX0KCX0KCWNvdXQgPDwgZW5kbDsKfQoKaW50IG1haW4oKQp7CgkKCXZlY3RvcjxzdHJpbmc+IGV4YW1wbGUoewoJCSJhW1tbYl1jIiwKCQkiYVtbYl1dYyIsCgkJImFbYl1dXWMiLAoJCSJhYmNbW2FiXTExMSIsCgkJIlthXVtiXWNdXV1bW2NbY11bIgoJfSk7Cglmb3IgKHN0cmluZyBzdHIgOiBleGFtcGxlKQoJCUNvbXBhcmVGdW5jKHN0cik7CglyZXR1cm4gMDsKfQ==