You are given a string word and an array of strings forbidden.
A string is called valid if none of its substrings are present in forbidden.
Return the length of the longest valid substring of the string word.
A substring is a contiguous sequence of characters in a string, possibly empty.
단어와 금지된 문자열들이 주어진다.
단어의 부분 문자열은 안에 금지된 문자열을 포함하지 않아야 한다.
조건을 만족하는 가장 긴 부분 문자열의 길이를 구하시오.
Input: word = "cbaaaabc", forbidden = ["aaa","cb"]
Output: 4
Explanation: aabc 가 aaa와 cb를 포함하지 않으면서 가장 길다.
고로 답은 aabc의 길이인 4가 된다.
EX. cbaaaabc 와 ['aaa', 'bc']
class Solution:
def longestValidSubstring(self, word: str, forbidden: List[str]) -> int:
# 문자열 검사하는것의 끝부분
right = len(word)
# 갱신할 최대길이
ans = 0
# 금지 문자열 모음
f = set(forbidden)
# 왼쪽은 하나하나씩 옮긴다.
for left in range(len(word) - 1, -1, -1):
# 검사할 문자열들
# 반드시 길이가 10을 넘지 않는다.
for i in range(left + 1, min(right + 1, left + 11)):
# 검사할 대상 문자열
w = word[left:i]
# 만약 금지대상에 포함시 오른쪽 끝을 옮기고 여기서 멈춤!
if w in f:
right = i - 1
break
# 찾은 최대 길이로 갱신.
ans = max(ans, right - left)
return ans
814ms 가 최선인걸 보면 애초에 엄청 빠른 알고리즘이 존재하는 문제는 아닌듯..