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

Python으로 문자열 양쪽 절반의 문자 집합이 동일한지 확인하는 방법

긴 문자열을 가운데 기준으로 나누어 두 부분이 서로 같은지 확인할 수 있습니다. 입력 문자열은 글자 수가 짝수일 수도 있고 홀수일 수도 있습니다. 글자 수가 짝수라면 전체 길이의 절반을 기준으로 왼쪽과 오른쪽 두 부분으로 나누면 되고, 글자 수가 홀수라면 정중앙에 있는 문자 하나를 무시한 뒤 나머지 두 부분만 비교하면 됩니다.

아래 프로그램에서는 위의 로직을 적용해 입력 문자열을 두 부분으로 나눈 다음, 각 부분을 리스트로 변환하고 정렬하여 비교합니다. 정렬 후 두 리스트가 같다면 양쪽 절반에 동일한 문자들이 포함되어 있다는 의미입니다.

예제 코드

from collections import Counter
def comparehalves(input_string):
    str_len = len(input_string)
# 글자 수가 홀수인 경우
# 가운데 문자는 무시
    if (str_len % 2 != 0):
        left = input_string[0:int(str_len / 2)]
        right = input_string[(int(str_len / 2)) + 1:]
    else:
        left = input_string[0:int(str_len / 2)]
        right = input_string[int(str_len / 2):]
# 각 부분을 리스트로 변환하고 정렬
    l1 = list(left)
    l1.sort()
    l2 = list(right)
    l2.sort()
    if l1 == l2:
        print ("Same character in both halves")
    else:
        print ("Both halves are different ")
in_string = input("Enter String: ")
comparehalves(in_string)

실행 결과

위 코드를 실행하면 다음과 같은 결과를 얻을 수 있습니다.

# Run1
Enter String: Tutorials
Both halves are different
# Run2
Enter String: TutTut
Same character in both halves

코드 설명

첫 번째 실행 예시인 "Tutorials"는 총 9글자로 홀수입니다. 이 경우 가운데 문자 'r'을 제외하고 왼쪽 "Tuto"와 오른쪽 "ials"를 비교하게 되며, 구성 문자가 다르므로 "Both halves are different"가 출력됩니다.

두 번째 실행 예시인 "TutTut"는 6글자로 짝수이며, 왼쪽 "Tut"와 오른쪽 "Tut"가 완전히 동일하므로 "Same character in both halves"가 출력됩니다.

참고로 collections 모듈의 Counter를 활용하면 정렬 대신 각 부분의 문자 빈도수를 딕셔너리 형태로 비교하는 방법도 사용할 수 있습니다. 이 경우 Counter(left) == Counter(right) 한 줄로 동일한 결과를 얻을 수 있어 코드가 더 간결해집니다.