我遇到了这个编码问题。
给定一个字符串s和一个函数isValid(String str),编写一个函数 检查s中有效的最长子序列。例如,a " whreat"中的后续序列可以"老鼠","吃","什么"或"小麦"。请 不要推测isValid(String str)函数的实现。
起初,我认为我可以使用DP来解决问题,但是因为我们不能假设isValid(String str),即" wh"是真的并没有表明任何" whe"将是真的,所以我不认为DP在这里工作。我能想到的唯一解决方案是回溯:获取字符串的所有子序列并检查每个字符串。但是,我不认为这是最佳解决方案。
我的问题是,这个问题有更好的解决方案吗?非常感谢。
答案 0 :(得分:0)
您不必检查每个可能的子字符串。如果您获得长度为4的有效字符串,则表示您不需要检查长度为3或更小的字符串。由于这个事实,你可以从长组合开始,一路向最小的方向发展,当你找到第一个有效的子字符串时停止。
答案 1 :(得分:0)
您可以从最长的子序列开始优化它,如果找不到长长度的有效子序列,请检查字母数较少的子序列。
例如,您首先检查选择所有字母是否是有效的子序列。如果没有,那么你将测试是否存在长度为n-1的子序列,其中isValid等。在每个阶段,如果你得到isValid = true,你可以简单地返回找到的子序列,因为它被认为是最长的有效子序列(因为较长的子序列已被取消资格)。
为了找到长度为m的所有可能的子序列<你可以使用回溯。