右指针从 $0$ 到 $n$ 循环.
因为 forbidden
数组中串的长度小于等于 $10$ , 每次从右指针开始循环最多 $10$ 次, 每次判断子串是否出现, 如果出现, 左指针跳到下一个位置.
class Solution {
public:
int longestValidSubstring(string word, vector<string>& forbidden) {
set<string> s(forbidden.begin(), forbidden.end());
int n = word.size();
int ans = 0;
for (int r = 0, l = 0; r < n; r ++ ) {
for (int i = r; i > max(r - 10, l - 1); i -- ) {
if (s.count(word.substr(i, r - i + 1))) {
l = i + 1;
break;
}
}
ans = max(ans, r - l + 1);
}
return ans;
}
};