为您提供一个字符串,它包含仅包含3个字符的字符。说,x y z。 将有百万条查询给你。 查询格式:x z i j
现在我们需要找到所有可能的不同子串,这些子串以x开头并以z结尾。 i和j表示子串必须位于的范围的下限和上限。它不应该跨越这一点。
我的逻辑: -
是否可以在查询之前预处理此字符串?所以,像这样需要O(1)时间来回答查询。
答案 0 :(得分:1)
正如其他人所说,你可以用分而治之的算法来做到这一点。
最佳子结构: 如果我们得到一个字符串的左半部分和一个右半部分,我们知道左半部分有多少个子字符串,右半部分有多少个字符串,那么我们可以将这两个数字加在一起。我们将对从左边开始到右边结束的所有字符串进行计数。这只是左子字符串中x的数量乘以右子字符串中的z的数量。
因此我们可以使用递归算法。
如果我们尝试解决单个i和j组合的所有问题,这将是一个问题,因为底层子问题将被解决很多次。
您应该考虑使用动态编程算法来实现这一点,以跟踪范围i,j和范围i,j和范围i,j中的范围i,j,x的子串。