代码求助:修正筛选含指定字母为子序列的单词列表的函数
问题分析与修复方案
你的函数逻辑错了——你写的代码只是检查letters里的每个字母是否存在于单词中,但这和“把letters作为子序列包含”完全不是一回事。子序列要求letters里的字母按顺序出现在单词里(不需要连续,但顺序不能乱),比如letters是"abc",单词"acb"里三个字母都有,但顺序不对,原函数会错误地把它选出来。
修复后的代码
def is_subsequence(target, word): # 用指针追踪target的当前匹配位置 target_idx = 0 for char in word: if target_idx < len(target) and char == target[target_idx]: target_idx += 1 # 如果所有target字符都按顺序匹配到了 return target_idx == len(target) def words_with_letters(words, letters): return [word for word in words if is_subsequence(letters, word)]
代码说明
is_subsequence函数专门用来判断letters是否是word的子序列:- 初始化一个指针
target_idx,用来标记当前需要匹配的letters字符位置 - 遍历单词的每个字符,一旦匹配到当前需要的
letters字符,就把指针往后移一位 - 遍历结束后,如果指针走到了
letters的末尾,说明所有字符都按顺序匹配完成
- 初始化一个指针
- 主函数里直接用这个辅助函数做筛选,就能得到符合要求的单词列表了
内容的提问来源于stack exchange,提问作者KareemSolidityDev
相关产品推荐
相关产品推荐

