- 문제
String 형인 str 인자에서 중복되지 않은 알파벳으로 이루어진 제일 긴 단어의 길이를 반환해주세요.
str: 텍스트
return: 중복되지 않은 알파벳 길이 (숫자 반환)
예를 들어,
str = "abcabcabc"
return은 3
=> 'abc' 가 제일 길기 때문
str = "aaaaa"
return은 1
=> 'a' 가 제일 길기 때문
str = "sttrg"
return은 3
=> 'trg' 가 제일 길기 때문
def get_len_of_str(string): maxLen = 0 for i in range(len(string)): for j in range(i, len(string)): tempStr = string[i:j+1] # String은 중복까지 포함해서 담음. tempSet = set(tempStr) # set은 집합이기 때문에 중복을 제거하고 담음. if len(tempStr) == len(tempSet): ## String과 Set의 길이가 같다면 중복이 존재하지 않는다는 것. if maxLen <= j-i+1: # 지금 검사하고 있는 글자 길이가 maxLen보다 더 크다면 maxlen을 바꿔줌. maxLen = j-i+1 else: ## String과 Set의 길이가 다르다면 중복이 존재한다는 것. break return maxLen
Python에서 Set이란 함수는 수학에서의 '집합'과 같이 중복을 제거하면서 요소를 담는다. 가령, String에서는 ['a','b','c','a','b','c']와 같이 담는다면, Set에서는 {'a','b','c'}만 존재하게 된다.
내 Solution은 이 차이를 활용했다. 주어진 input String들을 String에 중복된 문자열이 존재하면, 그 String을 Set으로 변환하면, 중복이 제거된 채 담길 것이고 두 자료형 사이에 Length에 차이가 존재한다.
반면에, 둘 길이가 똑같다면 중복이 없다는 뜻이다.
이중 for문으로 1번째 문자, 2번째 문자를 기준으로, 스트링의 범위를 늘려가면서
tempStr과 tempSet에 담아 그 둘의 length를 비교했고, 만약 그 둘이 같으면 중복이 없으니 계속 문자열을 추가하면 되고, 그렇지 않으면 바로 for문을 빠져나간다.
마지막에 중복되지 않은 최대 문자열의 길이를 담은 maxLen을 return하면 끝.