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

Python에서 문자열이 하위 문자열 정렬 작업으로 변환 가능한지 확인하는 프로그램

<시간/>

두 개의 숫자 문자열 s와 t가 있다고 가정하고 다음 작업을 여러 번 사용하여 문자열 s에서 t로 변환하려고 합니다. 1. s에서 비어 있지 않은 부분 문자열을 선택하고 문자가 오름차순으로 정렬되도록 제자리에서 정렬합니다. 문자열 s를 문자열 t로 변환할 수 있는지 여부를 확인해야 합니다.

따라서 입력이 s ="95643" t ="45963"과 같으면 "95643" -> "95463" -> "45963"을 사용하여 s를 t로 변환할 수 있으므로 출력은 True가 됩니다.

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

  • 장소 :=기본값 유형이 목록인 지도

  • s에서 0까지의 범위 크기에 있는 i에 대해

    • 키 :=s[i] 정수로

    • 장소[key]의 끝에 i 삽입

  • t의 각 e에 대해 수행

    • 키 :=e를 정수로

      • 장소[키]가 비어 있으면

        • 거짓을 반환

      • i :=장소[key]의 마지막 요소

      • 범위 0에서 키 - 1에 있는 j에 대해 수행

        • Places[j]가 비어 있지 않고 Places[j]

          • 거짓을 반환

      • 장소[key]에서 마지막 요소 삭제

  • 참을 반환

더 나은 이해를 위해 다음 구현을 살펴보겠습니다.

from collections import defaultdict
def solve(s, t):
   places = defaultdict(list)
   for i in reversed(range(len(s))):
      key = int(s[i])
      places[key].append(i)

   for e in t:
      key = int(e)
      if not places[key]:
         return False
      i = places[key][-1]
      for j in range(key):
         if places[j] and places[j][-1] < i:
            return False
      places[key].pop()
   return True

s = "95643"
t = "45963"
print(solve(s, t))

입력

"95643", "45963"

출력

True