String 형인 str 인자에서 중복되지 않은 알파벳으로 이루어진 제일 긴 단어의 길이를 반환해주세요.
str: 텍스트
return: 중복되지 않은 알파벳 길이 (숫자 반환)
예를 들어,
str = "abcabcabc"
return 은 3
=> 'abc' 가 제일 길기 때문
str = "aaaaa"
return 은 1
=> 'a' 가 제일 길기 때문
str = "sttrg"
return 은 3
=> 'trg' 가 제일 길기 때문
정답
def get_len_of_str(s): dct = {} # 중복되지 않는 문자열과 그 인덱스를 딕셔너리에 추가 max_so_far = curr_max = start = 0 # 지금까지 최대길이, 현재 최대길이, 스타트 인덱스는 0부터 시작 for index, i in enumerate(s): # enumerate를 사용하여 문자열과 index를 딕셔너리에 저장 if i in dct and dct[i] >= start: # 해당 문자열이 이미 딕셔너리에 존재하며, value가 스타트 값보다 큰 경우 max_so_far = max(max_so_far, curr_max) # 지금까지 최대길이는, 지금까지 최대길이와 현재 최대길이중의 max값 curr_max = index - dct[i] # 현재 최대길이는 새로운 중복 문자열의 인덱스에서 최초 중복 문자열의 인덱스를 뺀 값으로 갱신 start = dct[i] + 1 # 스타트 인덱스는 최초 중복 문자열에 1을 더한 장소로 slide시킴 else: # 해당 문자열이 딕셔너리에 존재하지 않는 경우 curr_max += 1 # 현재 최대길이를 1씩 증가시키고, dct[i] = index # dct에 key가 해당 문자열, value가 해당 문자열의 인덱스 값으로 하여 요소를 저장 return max(max_so_far, curr_max)def get_len_of_str(s): if len(s) == 0: # 문자열의 길이가 0일때 0을 리턴. return 0 ` map = {} # 중복되지 않는 문자열과 그 인덱스를 딕셔너리에 추가 max_length = start = 0 # 최대길이와 스타트 인덱스는 0에서 시작 ` for i in range(len(s)): if s[i] in map and start <= map[s[i]]: # 중복 문자열이 이미 딕셔너리에 존재하며, 스타트 인덱스가 중복 문자열의 인덱스보다 작거나 같은 경우, (abcabc에서 두번째 a가 등장했을때) start = map[s[i]] + 1 # 스타트 인덱스 위치를 최초 중복 문자열의 인덱스에 1을 더하여 slide 시킴 (abcabc의 경우, a가 아니라 b 부터 길이를 재도록, 중복 문자열이 나올때마다 최초 중복 문자열을 제외하고 다시 카운트가 시작되도록 ) else: # 중복 문자열이 딕셔너리에 존재하지 않는 경우, max_length = max(max_length, i - start + 1) # 최대 길이는, 현재 최대 길이와 현재 문자열의 인덱스에서 스타트 인덱스를 뺀 문자열의 길이(길이를 구하므로 1을더해줌) 둘 중에 max값으로 지정. map[s[i]] = i # 해당 요소의 철자를 key, 인덱스 값을 value로 하여 map 딕셔너리에 추가. ` return (max_length)s = sttrg 이다 ㅡ ㅡ def get_len_of_str(s): c = "" # C를 임시저장하는곳 result = 0 # 최종 결과의 길이 for i in s: # sttrg를 하나씩 간다. if i not in c: # 첫번째 글짜("s")가 c(지금은 비었지)에 없으면 / 두번째 글짜("t")가 c(지금은 "s")있지만 없지 / 세번째("t")가 들어갈때 c에는 t가 이미 있네 . . c += i # 그냥 c에 추가가 됌 문자열로 else: # 3번째 (t) 가 이미 겹치면 열로와서 들가야지 if len(c) > result: # c의 개수는 현재 result(맨첨은 0)이니, 당연히 크고 result = len(c) # 그럼 넘어가서 len(c)로 result로 업데이트 해줘 c = i # 그리고 다시 3번째 t를 다시 넣어서 첫번째로 정의해주고 가 ` if len(c) > result: # 글고 이제 들어오는 len(c)랑 아까 result랑 비교해서 값 출력 하기 return len(c) else: return result진짜 개어렵누 .. ... .