要查找按字典顺序大于给定字符串的子序列数

时间:2017-08-03 17:55:24

标签: java

我正在尝试竞争性编码,并且有一个问题,我被要求打印大于给定字符串的字符串数

例如: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
}

但在这里我也得到了问题不允许的字符串....所以我如何找到子序列。

1 个答案:

答案 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]