muszę wyodrębnić ciągów z nawiasów zagnieżdżonych tak:Extract ciąg wewnątrz zagnieżdżonych nawiasów
[ this is [ hello [ who ] [what ] from the other side ] slim shady ]
Wynik (kolejność nie ma znaczenia):
This is slim shady
Hello from the other side
Who
What
Uwaga, łańcuch może mieć N nawiasach i zawsze będą ważne, ale mogą, ale nie muszą być zagnieżdżone. Ponadto ciąg nie musi rozpoczynać się nawiasem.
Rozwiązania, które znalazłem w Internecie dla podobnego problemu, sugerują wyrażenie regularne, ale nie jestem pewien, czy zadziała w tym przypadku.
Myślałem o realizacji tego podobny do tego, jak możemy sprawdzić, czy ciąg ma wszystkie poprawne nawiasów:
przejść przez ciąg. Jeśli widzimy [przesuwamy jego indeks na stosie, jeśli widzimy], podciągamy stamtąd do bieżącego miejsca.
Musimy jednak usunąć ten podciąg z oryginalnego łańcucha, abyśmy nie dostali go jako części któregokolwiek z wyjść. Zamiast więc naciskać tylko przesuwając indeks do stosu, zastanawiałem się nad utworzeniem listy obiektów typu LinkedList, kiedy znajdziemy [wstawiamy ten węzeł na liście LinkedList. Umożliwi nam to łatwe usunięcie podciągu z listy LinkedList.
Czy to byłoby dobre podejście, czy też istnieje bardziej przejrzyste, znane rozwiązanie?
EDIT:
'[ this is [ hello [ who ] [what ] from the other [side] ] slim shady ][oh my [g[a[w[d]]]]]'
powinien powrócić (kolejność nie ma znaczenia):
this is slim shady
hello from the other
who
what
side
oh my
g
a
w
d
Białe spacje nie ma znaczenia, to jest trywialne, aby usunąć później. Liczy się to, że można odróżnić różne treści w nawiasach. Albo oddzielając je w nowych liniach, albo mając listę łańcuchów.
Jest to miły trudne pytanie, chcę rozwiązać go za pomocą rekurencji, ale to może być trochę trudne :) –
iść dalej i spróbować them'all .. – Sundeep
co to początkowy konstrukt z nawiasami? Tylko ciąg taki jak "astring =" [to [cześć [kim] [z drugiej strony] szczupły cień] "? Jeśli tak, dlaczego nie po prostu 'astring.replace (')', '')', 'astring.replace ('[', '')', a następnie 'astring.split()'? –