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):
if len(s) == 0:
return 0
unique_s = set(s)
if len(s) == len(unique_s):
return len(s)
for i in unique_s:
if s.count(i) != 1:
if (len(set(max(s.split(i), key = len)))) == (len(max(s.split(i), key = len))):
return len(max(s.split(i), key = len)) +1
문제 접근
input값이 없다면 0을 return한다
중복 값이 없다면 input값의 길이를 return한다
1. set을 사용해 고유 값을 구한다
2. input값을 반복문을 통해 고유 값으로 split한다
3. 그 중 길이가 가장 큰 값에 +1을 하여 return한다
접근방법을 코드로 적으면 len(max(s.split(i), key = len)) +1 이 된다for i in unique_s: if s.count(i) != 1: return len(max(s.split(i), key = len)) +1
for i in unique_s: if s.count(i) != 1: if (len(set(max(s.split(i), key = len)))) == (len(max(s.split(i), key = len))): return len(max(s.split(i), key = len)) +1
여기서 첫 번째가 아니라 두 번째함수처럼 조건문을 하나 더 사용한 이유는
첫 번째 함수의 경우 중복 값이 여러 개일 때 고정된 값이 아니라 set에 의한 랜덤 값이 split 시켜버린다
따라서 함수를 실행할 때 동일한 값이 나오지 않는다
그 문제를 해결하기 위해 다시 한 번 set을 사용해 길이를 비교했다
def get_len_of_str(s):
str = []
length = 0
for i in range(len(s)):
if s[i] not in str:
str.append(s[i])
else:
str = [s[i]]
length = max(length, len(str))
return length
빈 list를 만들어서 input값의 길이 만큼 반복문을 실행시킨다
이 때 s[i]에 해당하는 값이 list에 없다면 추가시키고, 있다면 list를 재정의한다
반복문이 실행될 때마다 length와 list의 길이를 비교해 더 큰 값을 length에 재정의한다