텍스트와 패턴이라는 문자열 목록이 있다고 가정하고 주어진 패턴의 문자열과 일치하는 텍스트의 모든 하위 문자열이 및 로 래핑되는 embolden 함수를 정의해야 합니다. 태그. 두 패턴이 인접하거나 겹치는 경우 하나의 태그로 병합해야 합니다.
따라서 입력이 text ="thisissampleline" patterns =["this", "issam", "sample"]과 같으면 출력은 "abcdefg", bc 및 ef가 텍스트와 일치하고 및 태그로 래핑됩니다.
이 문제를 해결하기 위해 다음 단계를 따릅니다.
-
n :=텍스트 크기
-
굵게 :=크기가 n인 목록, False 값으로 채우기
-
0에서 n 사이의 i에 대해 수행
-
패턴의 각 p에 대해 수행
-
텍스트의 하위 문자열[인덱스 i부터 끝까지]이 p로 시작하는 경우
-
범위 0에서 p 크기까지의 j에 대해
-
굵게[i + j] :=참
-
-
-
-
-
ans :=빈 문자열
-
0에서 n 사이의 i에 대해 수행
-
굵게[i] 및 (i가 0과 같거나 굵게[i - 1]이 false인 경우)
-
ans :=연결 ""
-
-
ans :=ans + 텍스트[i]
-
볼드[i] 및 (i가 n - 1과 같거나 볼드[i + 1]이 false인 경우)
-
ans :=as 연결 ""
-
-
-
반환
더 나은 이해를 위해 다음 구현을 살펴보겠습니다.
예
class Solution: def solve(self, text, patterns): n = len(text) bold = [False] * n for i in range(n): for p in patterns: if text[i:].startswith(p): for j in range(len(p)): bold[i + j] = True ans = "" for i in range(n): if bold[i] and (i == 0 or not bold[i - 1]): ans += "" ans += text[i] if bold[i] and (i == n - 1 or not bold[i + 1]): ans += "" return ans ob = Solution() text = "thisissampleline" patterns = ["this", "ssam", "sample"] print(ob.solve(text, patterns))
입력
"thisissampleline", ["this", "ssam", "sample"]
출력
<b>this</b>i<b>ssample</b>line