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

Python에서 주어진 두 문자열의 최대 길이 병합을 얻는 프로그램

<시간/>

두 개의 문자열 s와 t가 있다고 가정합니다. 다음과 같은 방법으로 merge라는 문자열을 만들어야 합니다. s 또는 t가 비어 있지 않은 동안 다음 옵션 중 하나를 선택합니다. -

  • s가 비어 있지 않은 경우 s의 첫 번째 문자를 추가하여 s에서 병합 및 삭제합니다.

  • t가 비어 있지 않은 경우 t의 첫 번째 문자를 추가하여 t에서 병합하고 삭제합니다.

따라서 사전순으로 가장 큰 병합을 찾아야 합니다.

따라서 입력이 s ="zxyxx" t ="yzxxx"와 같으면 출력은 zyzxyxxxxx가 됩니다. 왜냐하면

  • s에서 선택:merge ="z", s ="xyxx", t ="yzxxx"

  • t에서 선택:병합 ="zy", s ="xyxx", t ="zxxx"

  • t에서 선택:merge ="zyz", s ="xyxx", t ="xxx"

  • s에서 선택:merge ="zyzx", s ="yxx", t ="xxx"

  • s에서 선택:merge ="zyzxy", s ="xx", t ="xxx"

그런 다음 병합이 끝날 때 s와 t에서 나머지 5개의 x를 추가합니다.

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

  • ans :=빈 문자열

  • 아이디x1 :=0, 아이디x2 :=0

  • 동안 idx1

    • s[idx1]> t[idx2] 또는 (s[idx1]이 t[idx2]와 동일하고 s[인덱스 idx1에서 끝까지]>=t의 부분 문자열[인덱스 idx2에서 끝까지]과 같으면

      • ans :=ans 연결 s[idx1]

      • idx1 :=idx1 + 1

    • 그렇지 않으면 s[idx1]

      • ans :=ans 연결 t[idx2]

      • idx2 :=idx2 + 1

  • return ans concatenate s[index idx1에서 end] concatenate t[index idx2에서 end]

예시

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

def solve(s, t):
   ans = ""
   idx1 = idx2 = 0
   while(idx1<len(s) and idx2<len(t)):
      if s[idx1]>t[idx2] or (s[idx1]==t[idx2] and s[idx1:]>=t[idx2:]):
         ans+=s[idx1]
         idx1+=1
      elif s[idx1]<t[idx2] or (s[idx1]==t[idx2] and s[idx1:]<=t[idx2:]):
         ans+=t[idx2]
         idx2+=1

   return ans+s[idx1:]+t[idx2:]

s = "zxyxx"
t = "yzxxx"
print(solve(s, t))

입력

[7,4,5,3,8], [[0,2,2],[4,2,4],[2,13,100]]

출력

zyzxyxxxxx