【问题标题】:Kth subsequence of a string字符串的第 K 个子序列
【发布时间】:2016-12-22 16:46:02
【问题描述】:
给定一个字符串 S 和一个整数 K,我们必须找到一个字符串 T 使得如果我们按字典顺序对字符串 S 的所有子序列进行排序,那么 T 在第 K 个位置。
这里是问题的链接Link
我在练习动态编程的问题时遇到了这个问题。但是我无法解决它。
【问题讨论】:
标签:
c++
string
algorithm
data-structures
dynamic-programming
【解决方案1】:
好吧,我无法为您提供精确的算法,因为我看到链接中的描述与您的不同。但是您可以使用深度优先搜索的变体来完成此任务。
1) 制定一个在控制台上打印所有正常子字符串的算法。使用深度拳头搜索算法来传递字符。算法的每次迭代都应该产生一个单词。考虑一下您通过一个带有循环的图形,因为您需要在每次下一次迭代时存储所有已经通过的字符 - 使用容器。
2) 创建一个函数,考虑到当前深度级别的已处理字符,返回下一个字典字符的索引。修改您的算法,使其返回具有一定长度的词典子字符串。
请注意,此功能需要从您的链接中添加问题。要求必须保持字符的顺序。因此,在将“已处理字符”传递给下一次迭代之前,您还需要处理当前字符左侧的所有字符。
4) 现在不再打印子字符串,而是将它们存储在一个容器中,并为每个子字符串增加一个计数器。如果您已经处理了相同的单词,则不会增加计数器。当您的计数器达到 T 时,您就有了自己的承诺。如果算法完成并且计数器不等于 T,则打印“Eel”。