Java 递归-将括号设置为字符串字符

Java 递归-将括号设置为字符串字符,java,arrays,string,recursion,brackets,Java,Arrays,String,Recursion,Brackets,我的编程任务有问题。我的工作是编写一个方法,该方法获取字符串并将其括起来。它应该以数组的形式返回。例如: String s=“ab”; 那么阵列必须是: [ab, (a)b, ((a)(b)), a(b), (ab), (a)(b), ((a)b), (a(b))] 重要的是,不会出现两次结果。同样重要的是,不应该有括号直接包围另一对括号,如((a))b或((a)(b))。如果为空或零,则结果也必须是空数组()。我只允许使用类String的方法。类Brexit包含一个名为append的方法。

我的编程任务有问题。我的工作是编写一个方法,该方法获取字符串并将其括起来。它应该以数组的形式返回。例如:

String s=“ab”;
那么阵列必须是:

[ab, (a)b, ((a)(b)), a(b), (ab), (a)(b), ((a)b), (a(b))]
重要的是,不会出现两次结果。同样重要的是,不应该有括号直接包围另一对括号,如
((a))b
((a)(b))
。如果为空或零,则结果也必须是空数组<不允许使用代码>()。我只允许使用类
String
的方法。类Brexit包含一个名为append的方法。使用此方法,我可以将字符串附加到数组的末尾。到目前为止,这是我的代码,但我不知道如何继续

公共类括号{
公共静态字符串[]括号(英国退出b,字符串s){
字符串[]数组=新字符串[]{};
如果(s==null | | s==“”){
返回数组;
}
如果(s.长度()==1){
array=b.append(数组,s);
array=b.append(数组,“(“+s+”)”);
返回数组;
}否则{
int a=0;
返回括号(b,s.子串(a+1,s.长度()-1));
}
}
}
由于Java 9,您可以使用方法获取字符上的流,然后使用
map
reduce
方法

示例字符串:

String s=“ab”;
首先,将每个字母表示为该字母的数组,并用括号表示该字母:

[a, (a)]
[b, (b)]
然后得到这些数组的笛卡尔积:

ab
a(b)
(a)b
(a)(b)
如果要获得更多括号,请重复第一个操作:

[ab, (ab)]
[a(b), (a(b))]
[(a)b, ((a)b)]
[(a)(b), ((a)(b))]
Java代码:

String s=“ab”;
字符串[]数组=s
//对字符串的字符进行流式处理
.codePoints()
//溪流
.mapToObj(字符::toString)
//将每个字母表示为
//这封信和这封带括号的信
.map(str->新字符串[]{str,(“+str+”)”})
//中间输出
.peek(arr->System.out.println(Arrays.toString(arr)))
//阵列流到单个阵列
.reduce((arr1,arr2)->Arrays.stream(arr1)
.flatMap(str1->Arrays.stream(arr2)
.map(str2->str1+str2))
.toArray(字符串[]::新建))
//溪流
.stream()
//溪流
.flatMap(数组::流)
//中间输出
.peek(System.out::println)
//将每个字符串表示为
//这个字符串和这个带括号的字符串
.map(str->新字符串[]{str,(“+str+”)”})
//中间输出
.peek(arr->System.out.println(Arrays.toString(arr)))
//溪流
.flatMap(数组::流)
.toArray(字符串[]::新建);
//最终产量
System.out.println(array.toString(array));
最终输出:

[ab, (ab), a(b), (a(b)), (a)b, ((a)b), (a)(b), ((a)(b))]

你能更详细地解释一下所需的括号策略吗。对于长度为2的输入,模式是清晰的,但对于较长的字符串,则不清楚。例如,“(ab)c”是给定“abc”的必需输出吗?是的,以及(abc),(a)bc,((ab)c)。。。。。。