Подскажите алгоритм, который перебирает все возможные сочетания скобок в выражениях
Нужен алгоритм, который перебирает все возможные сочетания скобок в выражениях, я придумал рекурсивный метод, но он углубляется (спускается) в подстроки со скобками (...(...)...). Т.е. он в принципе не генерирует строки вида (a+b)+(c+d). На данном этапе придумал 1 неполное решение, которе, уверен, можно допилить: начиная с последнего вхождения '(', заканчивая первым ')' пробегать и вставлять в строку скобки НО таким образом, повторюсь генерируются выражения исключительно со вложенными скобками ((((((...)))))), никак не (((...)(...))), которые тоже имеют место быть. И второе решение, которое работает, но (на мой взгляд) не эффективно по памяти: вместо скобок для каждого выражения хранить последовательность действий, но памяти так расходуется вдвое больше.
@SuppressWarnings("unused") // 1е решение (второе удалил :D)
private String buildBrackets(String in) throws IOException {
if (in.lastIndexOf('(') + 1 != in.indexOf(')')) {
outer:
for (int i = in.lastIndexOf('(') + 1; i < in.indexOf(')') - 1; i++) {
for (int j = i + 1; j < in.indexOf(')') + 1; j++) {
StringBuilder sb = new StringBuilder();
sb.append(in.subSequence(0, i));
try {
if (!Character.isDigit(sb.charAt(i - 1))) {
sb.append('(');
} else {
continue outer;
}
} catch (Exception e) {}
sb.append(in.subSequence(i, j));
try {
if (Character.isDigit(sb.charAt(j))) {
sb.append(')');
} else {
continue;
}
} catch (Exception e) {}
sb.append(in.subSequence(j, in.length()));
bw.write(sb.toString() + '\n');
//return buildBrackets(sb.toString());
}
}
}
return null;
}
