Итак, прежде чем люди начнут задавать вопросы, почему я не использую стек для экономии времени по сравнению с использованием счетчиков и прочего.
Это домашняя задача, связанная с пространственной сложностью, поэтому, игнорируя временную сложность, мы пытаемся уменьшить сложность пространства.
Для этого мне нужно использовать счетчики, чтобы отслеживать скобки.
Возможные типы скобок: '(' ')' '[' ']'
Я попробовал немного кодирования, но, похоже, у меня проблема с одной из тестовых строк, и я просто не могу точно определить, где происходит проблема.
Boolean isWF(String w) {
// maxLevel is found and any variables I'm using has been initialized
for(int i = 0; i < maxLevel; i++) {
x = w.charAt(i);
currentLevel = i;
if(x == '(' || x == '[') {
holder = x; // Store bracket here to check match
savedLevel++;
counter++;
currentLevel++;
for(int j = i+1; j < w.length(); j++) {
x = w.charAt(j);
if(x == '(' || x == '[') {
currentLevel++;
if(currentLevel == savedLevel) {
holder = x;
counter++;
}
}
else if(x == ')' || x == ']') {
if(currentLevel == savedLevel) {
if((holder == '(' && x == ')') || (holder == '[' && x == ']')) {
currentLevel--;
counter--;
}
else
return false;
}
else {
currentLevel--;
}
}
}
}
else if(x == ')' || x == ']') {
counter--;
if(counter < 0) {
return false;
}
}
}
if(counter != 0) {
return false;
}
return true;
}
}
Струны, которые я тестирую:
()[] - expected to be true, actual is true
([)] - expected to be false, actual is false
[([([()])])] - expected to be true, actual is true
([()([])()][()(())]()) - expected to be true, actual is false
([()([])())[()(())]()) - expected to be false, actual is false