문자열이 있다고 가정합니다. 문자를 반복하지 않고 가장 긴 부분 문자열을 찾아야 합니다. 따라서 문자열이 "ABCABCBB"와 같으면 길이가 3인 반복되는 부분 문자열이 있으므로 결과는 3이 됩니다. 이것이 "ABC"입니다.
이 문제를 해결하기 위해 다음 단계를 따릅니다.
- set i :=0, j :=0, 정보를 저장할 하나의 맵 설정
- ans :=0
- while j <문자열 길이 s
- s[j]가 지도에 없거나 i> map[s[j]]이면
- ans :=max(ans, j – i + 1)
- 지도[s[j]] :=j
- 그렇지 않으면
- i :=지도[s[j]] + 1
- ans :=max(ans, j – i + 1)
- j를 1 감소
- j를 1 증가
- s[j]가 지도에 없거나 i> map[s[j]]이면
- 반환
예제(Python)
이해를 돕기 위해 다음 구현을 살펴보겠습니다.
class Solution(object):
def lengthOfLongestSubstring(self, s):
i =0
j = 0
d={}
ans = 0
while j < len(s):
if s[j] not in d or i>d[s[j]]:
ans = max(ans,(j-i+1))
d[s[j]] = j
else:
i = d[s[j]]+1
ans = max(ans,(j-i+1))
j-=1
#print(ans)
j+=1
return ans
ob1 = Solution()
print(ob1.lengthOfLongestSubstring("ABCABCBB")) 입력
"ABCABCBB"
출력
3