我有下一个带有嵌套括号的String:
String a = "(red(blue))grey((orange)green)";
我想用一个数组填充打印出的每个括号的值:
(red(blue))
(blue)
grey
((orange)green)
(orange)
//In any order
答案 0 :(得分:0)
我认为下面的代码应该有效:
算法:首先使用堆栈标记左括号的结束位置,然后在下一次迭代中使用开始位置和结束位置。
import java.util.*;
import java.lang.*;
import java.io.*;
class Ideone
{
public static void main (String[] args) throws java.lang.Exception
{
String s = "(red(blue))grey((orange)green)";
int n = s.length();
int end[] = new int[n];
boolean internalWords = false;
Stack<Integer> stack = new Stack<Integer>();
for(int i = 0 ; i < n ; i++){
if(s.charAt(i)=='('){
stack.push(i);
}else if(s.charAt(i)==')'){
int start = (Integer)stack.pop();
end[start] = i;
}else if(stack.isEmpty()){
System.out.print(s.charAt(i));
}
}
System.out.println();
for(int i = 0 ; i < n ; i++){
if(s.charAt(i)=='('){
for(int j = i ; j <= end[i]; j++){
System.out.print(s.charAt(j));
}
System.out.println();
}
}
}
}
out put:
grey
(red(blue))
(blue)
((orange)green)
(orange)