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

Python의 DI 문자열 일치

<시간/>

"I"(증가를 나타냄) 또는 "D"(감소를 나타냄)만 포함하는 문자열 S가 있다고 가정하고 N =S의 크기라고 가정합니다. [0, 1, ...의 순열 A를 반환해야 합니다. , N] 범위 0, ..., N-1 −

의 모든 i에 대해
  • S[i]가 "I"이면 A[i]
  • 그렇지 않으면 S[i]가 "D"이면 A[i]> A[i+1]

따라서 입력이 "IDID"와 같으면 출력은 [0,4,1,3,2]

가 됩니다.

이 문제를 해결하기 위해 다음 단계를 따릅니다. −

  • A :=0에서 N까지의 목록입니다. 여기서 N은 S의 크기입니다.
  • res =빈 목록
  • S의 각 요소 j에 대해 다음을 수행합니다.
    • j가 I이면 A에서 마지막 요소를 삭제하고 res에 삽입
    • 그렇지 않으면 A의 첫 번째 요소를 삭제하고 res에 삽입
  • 반환 결과

이해를 돕기 위해 다음 구현을 살펴보겠습니다. −

class Solution:
   def diStringMatch(self, S):
      A=[i for i in range(len(S)+1)]
   return [A.pop((j=='I')-1) for j in S]+A
ob = Solution()
print(ob.diStringMatch("IDID"))

입력

"IDID"

출력

[0, 4, 1, 3, 2]