@atambalasi

Определить начло и конец скобок из String и расставить правильном порядке?

Дан строка вида
String fileStr= "['2', '3', ['b','a', ['A', 'B'], 'S', ['R'] ], 'G', ['Z']]";

Надо определить и закрыть скобки правильно.
Для определение использоваль StringBuilder и ArrrayList
StringBuilder str= new StringBuilder(fileStr);
   ArrayList<Integer> tokenIndexStart = new ArrayList<>();
   ArrayList<Integer> tokenIndexEnd = new ArrayList<>();


        for (int i = 0; i < str.length() - 1; i++) {

            if (str.charAt(i) == '[') {

                tokenIndexStart.add(i);
            } else if (str.charAt(i) == ']') {
                tokenIndexEnd.add(i);
            }
        }

Теперь есть два списка первый содерижть индексы где лежать начало скобки, а во втором списке лежить индексы закрывающися скобки. Надо расставить так чтобы правильно они закрывались. Мне надо получить
1)['2', '3', ['b','a', ['A', 'B'], 'S', ['R'] ], 'G', ['Z']]
2)['b','a', ['A', 'B'], 'S', ['R'] ]
3)['A', 'B']
4) ['R']
5) ['Z']
  • Вопрос задан
  • 144 просмотра
Пригласить эксперта
Ответы на вопрос 1
wataru
@wataru Куратор тега Алгоритмы
Разработчик на С++, экс-олимпиадник.
Я так понял, у вас в строке скобки расставлены правильно, и вам надо поставить соответствие межу скобками.

Используйте стек. Пройдитесь по строке циклом. При встрече открывающей скобки кладите ее позицию в стек. При встрече закрывающей скобки доставайте позицию соответствующей ей открывающей из стека. Скобки расставлены неправильно, если после обработки всей строки в стеке что-то осталось или вы встретили закрывающую скобку при пустом стеке.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы