Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

파이썬에서 k개의 문자를 삭제한 후 가능한 모든 부분 문자열 구하기

문자열이 주어졌을 때, 문자열에서 한 글자씩 제거한 뒤 남은 문자들로 이루어진 문자열을 출력하는 작업이 필요합니다. 이 작업은 문자열의 모든 글자에 대해 각각 수행해야 하므로, 최종적으로 여러 개의 부분 문자열이 만들어집니다.

루프와 range를 활용한 방법

가장 기본적인 프로그래밍 접근 방식입니다. 먼저 문자열을 선언하고, 시작(start)과 끝(end) 위치 변수를 만든 뒤, 각 글자를 임시로 담아둘 저장소(temp)를 준비합니다. 그다음 재귀 함수를 통해 각 글자를 하나씩 순회하면서 특정 글자를 제외한 나머지 문자들로 새로운 문자열을 만들어 리스트에 추가합니다.

예제

list = []

def letterCombinations(s, t, start, end, index, k):
   if (index == k):
      elem = ''

      for j in range(k):
         elem += t[j]
      list.append(elem)
      return

   i = start
   while (i <= end and end - i + 1 >= k - index):
      temp[index] = s[i]
      letterCombinations(s, t, i + 1,
                        end, index + 1, k)
      i += 1
stringA = 'Apple'
k = 1
temp = [0] * (len(stringA) - k)
start = 0
end = len(stringA) - 1

letterCombinations(stringA, temp, start, end, 0, len(stringA) - k)
print(set(list))

출력

위 코드를 실행하면 다음과 같은 결과를 얻습니다 −

{'pple', 'Aple', 'Appl', 'Appe'}

itertools를 활용한 방법

이 방식에서는 파이썬 표준 라이브러리인 itertools 모듈의 combinations 함수를 사용합니다. 이 함수는 주어진 문자열에서 k개의 글자를 제거한 후 가능한 모든 조합을 자동으로 생성해 주므로, 직접 재귀 로직을 작성할 필요 없이 훨씬 간결한 코드로 동일한 결과를 얻을 수 있습니다.

예제

from itertools import combinations

stringA = 'Apple'
k = 1

# using combinations
res = set([''.join(i) for i in combinations(stringA, len(stringA) - k)])

print(res)

출력

위 코드를 실행하면 다음과 같은 결과를 얻습니다 −

{'Appl', 'Aple', 'Appe', 'pple'}