您可以将可变容器作为累加器参数传递,如下所示:
注意新的
paths
参数
public static void allPaths(String a, String b, int i, int j, String s, int[][] arr, List<String> paths) {
if (i > 0 && j > 0) {
if (a.charAt(i - 1) == b.charAt(j - 1)) {
allPaths(a, b, i - 1, j - 1, a.charAt(i - 1) + s, arr, paths);
} else if (arr[i][j - 1] == arr[i - 1][j]) {
allPaths(a, b, i, j - 1, s, arr, paths);
allPaths(a, b, i - 1, j, s, arr, paths);
} else if (arr[i][j - 1] > arr[i - 1][j]) {
allPaths(a, b, i, j - 1, s, arr, paths);
} else if (arr[i][j - 1] < arr[i - 1][j]) {
allPaths(a, b, i - 1, j, s, arr, paths);
}
} else {
paths.add(s);
}
}
public static void main(String[] args) {
String b = "abbaecde";
String a = "abacbae";
final List<String> paths = new ArrayList<>();
allPaths(a, b, a.length(), b.length(), "", twoStringMatrix(a, b), paths);
System.out.println((paths));
}
我得到的结果包含重复项(
[abbae, abace, abace, abace]
)所以你可能想使用
Set
而是:
final Set<String> paths = new HashSet<>();
P、 我还注意到,使用字符串串联来构造路径并不是很有效,因为
String
每次创建对象时(作为
一串
s是不可变的)。你应该使用
StringBuilder
及其
insert
活动