연속된 문자열 체크(python)

Yeom Gyu Hyeon·2022년 4월 23일
0

코테

목록 보기
3/3

문자들의 연속된 길이 중 가장 긴 값을 리턴

from itertools import groupby

def long_repeat(data):
	return max([len(list(g)) for k, g in groupby(data)], default=0)

print(long_repeat("aaaaaabbaddedb"))
# 출력: 6

라이브러리 없이 구현

아이디어

  1. 맨 앞에 있는 문자를 하나 빼놓고 시작 => 시작하자마자 같은 문자로 비교
  2. 문자비교
    • 문자가 같다면 연속된 문자의 길이 증가
    • 문자가 다르다면 이전까지 저장한 문자의 길이 업데이트 하고 새로운 문자 세팅
  3. 마지막 문자가 이전 문자와 다를 수 있기 때문에 반복문 종료 후 마지막 문자 업데이트

코드

input = "aaaaaabbaddedb"
result = ""
contiguous_current_word = input[0]  #a
contiguous_cnt = 0
check_contiguous = [0 for _ in range(200)]  # 각 문자의 연속된 길이를 저장하는 리스트
for char in input:
	if char == contiguous_current_word:  #연속이 지속되는 경우라면
		contiguous_cnt += 1
	else:  # 연속이 깨지는 경우라면
		# 값을 확인하기 위한 테스트 변수
		result += contiguous_current_word
		result += str(contiguous_cnt)

		# 그 전까지 연속된 값을 업데이트
		if check_contiguous[ord(contiguous_current_word)] < contiguous_cnt:  #그 전까지 계산했던 해당 문자의 연속길이보다 긴 경우만 업데이트
			check_contiguous[ord(contiguous_current_word)] = contiguous_cnt
		# 연속되는 문자 현재 값으로 세팅
		contiguous_current_word = char
		contiguous_cnt = 1  # 문자 한개만 있어도 연속 값은 1임
if check_contiguous[ord(contiguous_current_word)] < contiguous_cnt:  # 마지막 문자에서 연속이 깨지면 업데이트 해줘야함
	check_contiguous[ord(contiguous_current_word)] = contiguous_cnt
# 값을 확인하기 위한 테스트 변수
result += contiguous_current_word
result += str(contiguous_cnt)

print([(chr(i), value) for i, value in enumerate(check_contiguous) if value !=0])
# 출력: [('a', 6), ('b', 2), ('d', 2), ('e', 1)]
print(result)
# 출력: a6b2a1d2e1d1b1
profile
개발일지

0개의 댓글