首先,我们可以将 forbidden 数组转化为一个集合,方便后续判断一个字符串是否在 forbidden 中。

然后,我们从字符串 word 的第一个字符开始,依次遍历每一个字符。如果当前字符与 forbidden 中的某个字符串匹配,我们就将当前字符的索引记为 end。

在遍历的过程中,我们还需要维护一个变量 start 来记录合法子字符串的起始位置。如果当前字符与 forbidden 中的某个字符串匹配,我们就更新 start 为 end 的下一个位置。

每次遍历到一个字符,我们都计算当前合法子字符串的长度,并与之前的最大长度进行比较,更新最大长度。

最后,我们返回最大长度作为结果。

下面是具体的实现代码:

def longestSubstring(word, forbidden): forbidden_set = set(forbidden) start = 0 end = -1 max_length = 0

for i, char in enumerate(word):
    if char in forbidden_set:
        end = i
        max_length = max(max_length, end - start)

        start = end + 1

return max(max_length, len(word) - start)

这个算法的时间复杂度是 O(n),其中 n 是字符串 word 的长度。因为我们需要遍历一次字符串 word,并在每次遍历时都进行一些常数时间的操作

给你一个字符串 word 和一个字符串数组 forbidden 。如果一个字符串不包含 forbidden 中的任何字符串我们称这个字符串是 合法 的。请你返回字符串 word 的一个 最长合法子字符串 的长度。子字符串 指的是一个字符串中一段连续的字符它可以为空。

原文地址: https://www.cveoy.top/t/topic/h6gL 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录