[leetcode] 중복 문자가 없는 가장 긴 부분 문자열

김민서·2024년 1월 5일
0

알고리즘 문제풀이

목록 보기
6/47
  1. Longest Substring Without Repeating Characters

링크텍스트
말그대로 중복 문자가 없는 가장 긴 부분 문자열을 구하는 문제이다.
쉬워보였지만 나한테는 오래 걸렸던 문제이다..ㅠ

s = "dvdf"
result = []
word = ""
i = 0		
pointer = 0

original = s		# 원래의 전체 문자열 복사

while True:
	if i > len(s):					# 인덱스가 문자열 길이보다 클 때 (문자열은 pointer 시작점을 기준으로 계속 잘린다는 것을 생각하자.)
    	result.append(len(word))	
    	break
        
    s = original[pointer:]		# pointer가 가리키는 문자 이후부터 문자열로 취급 
    							# (그 보다 앞 부분은 볼 필요 없음)
    
    if s[i] not in word:			# 중복되지 않는 알파벳이면
    	word += s[i]				# 부분 문자열에 추가
        i += 1						# 다음 알파벳을 가리킴
        
    else:							# 중복된 알파벳이면
    	result.append(len(word))	# 여태까지의 부분 문자열(중복 없는)을 result배열에 담음	
        word = ""					# 그리고 문자열 초기화 (중복된 알파벳이라서 부분 문자열에 추가할 수 없음. 그대로 끝) 
        pointer += 1				# pointer(시작점)를 다음 알파벳으로 변경
        i = 0						# 인덱스 초기화(문자열의 시작점을 가리킴)
        
if len(result) == 0: print(1)
else: print(max(result))			# result에 들어 있는 부분 문자열 중 가장 큰 문자열의 크기를 출력

풀이 설명: 주석으로 정리함.

포기하지 말고 끝까지 천천히 생각해보기
그리고 다시 풀 수 있어야 됨.(중요)
다른 방법도 찾아보기

0개의 댓글