문자열에서 찾기 및 바꾸기

2780 단어 leetcodetheabbiedsa
교체 작업s을 수행해야 하는 인덱스가 0인 문자열k이 제공됩니다. 대체 작업은 인덱스가 0인 세 개의 병렬 배열(indices , sourcestargets )로 제공되며 모두 길이는 k 입니다.
ith 교체 작업을 완료하려면:
  • 하위 문자열sources[i]이 원래 문자열indices[i]의 인덱스s에 있는지 확인합니다.
  • 발생하지 않으면 아무 조치도 취하지 마십시오.
  • 그렇지 않으면 발생하는 경우 해당 하위 문자열을 targets[i] 로 바꿉니다.

  • 예를 들어, s = "abcd" , indices[i] = 0 , sources[i] = "ab"targets[i] = "eee" 인 경우 이 교체의 결과는 "eeecd" 입니다.

    모든 교체 작업은 동시에 발생해야 합니다. 즉, 교체 작업이 서로의 인덱싱에 영향을 주지 않아야 합니다. 교체가 겹치지 않도록 테스트 케이스가 생성됩니다.
  • 예를 들어 s = "abc" , indices = [0, 1]sources = ["ab","bc"] 가 포함된 테스트 사례는 "ab""bc" 교체가 겹치기 때문에 생성되지 않습니다.
  • s 에서 모든 교체 작업을 수행한 후 결과 문자열을 반환합니다.

    하위 문자열은 문자열에서 연속적인 문자 시퀀스입니다.

    예 1:



    입력: s = "abcd", 인덱스 = [0, 2], 소스 = ["a", "cd"], 대상 = ["eee", "ffff"]
    출력: "eeebffff"
    설명:
    "a"는 s의 인덱스 0에서 발생하므로 "eee"로 바꿉니다.
    "cd"는 s의 인덱스 2에서 발생하므로 "ffff"로 대체합니다.

    예 2:



    입력: s = "abcd", 인덱스 = [0, 2], 소스 = ["ab","ec"], 대상 = ["eee","ffff"]
    출력: "eeecd"
    설명:
    "ab"는 s의 인덱스 0에서 발생하므로 "eee"로 대체합니다.
    "ec"는 s의 인덱스 2에서 발생하지 않으므로 아무것도 하지 않습니다.

    제약:
  • 1 <= s.length <= 1000
  • k == indices.length == sources.length == targets.length
  • 1 <= k <= 100
  • 0 <= indexes[i] < s.length
  • 1 <= sources[i].length, targets[i].length <= 50
  • s는 영문 소문자로만 구성되어 있습니다.
  • sources[i]targets[i]는 영문 소문자로만 구성됩니다.

  • 해결책:

    class Solution:
        def findReplaceString(self, s: str, indices: List[int], sources: List[str], targets: List[str]) -> str:
            n = len(indices)
            op = list(s)
            for i in range(n):
                if s[indices[i]:indices[i]+len(sources[i])] == sources[i]:
                    op[indices[i]] = targets[i]
                    for j in range(indices[i] + 1, indices[i] + len(sources[i])):
                        op[j] = ""
            return "".join(op)
    

    좋은 웹페이지 즐겨찾기