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

파이썬에서 합성된 문자열의 특정 인덱스에서 문자를 찾는 프로그램

<시간/>

문자열 'input_str'이 주어졌다고 가정합니다. 이제 주어진 문자열에서 가능한 모든 하위 문자열을 결정한 다음 모든 하위 문자열을 어휘 순서대로 다른 문자열로 연결하라는 요청을 받습니다. 정수 값 k도 제공됩니다. 우리의 임무는 연결된 문자열에서 인덱스 k에 있는 문자를 반환하는 것입니다.

따라서 입력이 input_str ='pqrs', k =6과 같으면 출력은 p

가 됩니다.

사전순으로 주어진 문자열의 부분 문자열은 p, pq, pqr, pqrs, q, qr, qrs, r, rs, s입니다.

문자열을 연결하면 ppqpqrpqrsqqrqrsrrss가 됩니다. 위치 6에서 문자는 'p'입니다. (인덱싱은 0부터 시작).

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

  • stk_list :=빈 문자열과 input_str의 모든 문자 목록을 포함하는 튜플을 포함하는 새 목록
  • stk_list가 비어 있지 않은 동안 do
    • pre :=stk_list에서 마지막 요소 삭제
    • temp :=stk_list에서 마지막 요소 삭제
    • k
    • 반환 프리[k]
  • k :=k - 사전 크기
  • input_sorted :=input_str의 문자와 input_str에서의 위치를 ​​포함하는 튜플을 포함하는 새 목록
  • 튜플의 두 번째 값을 기준으로 input_sorted 목록을 내림차순으로 정렬
  • i :=0
  • 내가
  • val :=input_sorted[i, 0]
  • temp1 :=[input_sorted[i, 1]]
  • j :=나는 + 1
  • j
  • temp1의 끝에 input_sorted[j, 1] 삽입
  • j :=j + 1
  • stk_list 끝에 (pre+val, temp1) 삽입
  • i :=j
  • null 반환
  • 예시

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

    def solve(input_str, k):
       stk_list = [("",list(range(len(input_str))))]
       while stk_list:
          pre, temp = stk_list.pop()
          if k < len(pre):
             return pre[k]
          k -= len(pre)
          input_sorted = sorted([(input_str[i],i+1) for i in temp if i < len(input_str)], reverse=True)
          i = 0
          while i < len(input_sorted):
             val = input_sorted[i][0]
             temp1 = [input_sorted[i][1]]
             j = i + 1
             while j < len(input_sorted) and input_sorted[j][0]== val:
                temp1.append(input_sorted[j][1])
                j += 1
             stk_list.append((pre+val, temp1))
             i = j
       return None
    
    print(solve('pqrs', 6))

    입력

    'pqrs', 6
    

    출력

    p