我正在尝试竞争性编码,并且有一个问题,我被要求打印大于给定字符串的字符串数
例如:ab:那么可能的太阳序列是a,b,ab ......这些b中唯一更大的一个(注意ba不是子序列)
abc:那么可能的子序列是a,b,c,ab,ac,bc,abc这些只有4个填充标准....
所以我尝试了这段代码
for(i=0;i<length;i++)
{
// find the number of permutations
}
但在这里我也得到了问题不允许的字符串....所以我如何找到子序列。
答案 0 :(得分:0)
根据您的评论,您已经有了一个计算给定输入的所有排列的方法,让我们调用此方法permutate
,它需要String
并给出String[]
。
现在,您希望从所有排列中删除按字典顺序小于或等于的输入。最后,您需要一个仅包含按字典顺序更大排列的集合。
我们现在唯一需要的是我们如何比较String
字典?但这很容易,因为String
已经提供了这样一种方法,它被称为compareTo
(这里是official documentation)。您将其与first.compareTo(second)
一起使用,并根据第一个String
返回否定,正或零值按字典顺序小,更高或等于到第二个String
。
所以我们只是迭代结果排列并用compareTo
检查哪些元素需要丢弃以及我们保留哪些元素。
这是一个片段:
String input = "abc";
String[] allPermutations = permutate(input); // Contains [a, b, c, ab, ac, bc, abc]
ArrayList<String> permutationsToKeep = new ArrayList<>();
for (String permutation : allPermutations) {
if (permutation.compareTo(input) > 0) {
// Permutation is lexicographically greater than input, keep it
permutationsToKeep.add(permutation);
}
}
// permutationsToKeep now contains your desired result
// [b, c, ac, bc]