首先定义一个哈希表来存储所有的目标单词,然后使用两个指针来维护一个窗口。在窗口内,逐个检查是否包含目标单词,如果包含就将其存入结果列表中。然后,移动窗口右边界,直到窗口内包含了所有的目标单词。如果窗口内的子串长度超过了所有目标单词串联起来的总长度,则移动窗口的左边界,直到窗口内不再多余所需的目标单词。
接下来,以单词 "banana" 作为起点,可以得到以下子串: "banana" "bananacherry" 最后,以单词 "cherry" 作为起点,可以得到以下子串: "cherry" 将上述所有的子串汇总起来,就得到了所有的串联所有单词的子串。 需要注意的是,对于给定的单词列表,可能存在重复的单词。在生成子串时,我们需要考虑是否允许重复使用相同的单词...
30. 串联所有单词的子串 - 给定一个字符串 s 和一个字符串数组 words。 words 中所有字符串 长度相同。 s 中的 串联子串 是指一个包含 words 中所有字符串以任意顺序排列连接起来的子串。 * 例如,如果 words = ["ab","cd","ef"], 那么 "abcdef", "abefcd","cdabef"
如果您串联的字符串数量不那么巨大(例如,在循环中),那么这些代码的性能成本可能不会很高。 上述情况同样适用于 String.Concat 和 String.Format 方法。 但如果性能的优劣很重要,则应该总是使用 StringBuilder 类来串联字符串。 下面的代码使用 StringBuilder 类的 Append 方法来串联字符串,因此不会有 + 运算符的链接...