Computer >> 컴퓨터 >  >> 프로그램 작성 >> Python

Python에서 패턴을 굵은 태그로 묶는 프로그램?

<시간/>

텍스트와 패턴이라는 문자열 목록이 있다고 가정하고 주어진 패턴의 문자열과 일치하는 텍스트의 모든 하위 문자열이 로 래핑되는 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