gpt4 book ai didi

java - 字符串的所有子字符串和 'semi-substrings'

转载 作者:行者123 更新时间:2023-12-02 12:07:48 29 4
gpt4 key购买 nike

我知道我可以像这样获取给定字符串的所有子字符串:

String inputString = "abcde";

java.util.Set<String> substrings = new java.util.TreeSet<>();
int strLength = inputString.length();
for(int i=0; i<strLength; i++)
for(int j=0; j<=strLength-i; j++)
substrings.add(inputString.substring(i, i+j));

这将使我在集合中得到以下结果:

a, ab, abc, abcd, abcde, b, bc, bcd, bcde, c, cd, cde, d, de, e, 

但是,我想以某种方式获得以下列表:

a, ab, abc, abcd, abcde, abce, abd, abde, abe, ac, acd, acde, ace, ad, ade, ae, b, bc, bcd, bcde, bce, bd, bde, be, c, cd, cde, ce, d, de, e

因此,除了所有子字符串之外,当您删除中间的一个或多个字符时,我还需要字符串(即通过删除 bd 来删除 ace ) )。

实现这一目标的最简单方法是什么?

注意:所有字符应保持相同的顺序,否则我会将字符串的所有排列与这些字符串的所有子字符串组合起来。

最佳答案

检查这个解决方案。我的软件工程课上的老师不久前为我们提供了这个解决方案。我对其进行了一些编辑,以确保您使用 TreeSet 获得有序集。

public static Set<String> stringSubsets(String str) {
if (str.isEmpty()) {
return new TreeSet<>(Arrays.asList(""));
} else {
char currentChar = str.charAt(0);
String rest = str.substring(1);

Set<String> combinationsOfRest = stringSubsets(rest);
Set<String> result = new TreeSet<>();

result.addAll(combinationsOfRest);
for (String c: combinationsOfRest)
result.add(currentChar + c);

return result;
}
}

关于java - 字符串的所有子字符串和 'semi-substrings',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46770558/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com