[LeetCode] 3번 Longest Substring Without Repeating Characters
Updated:
문제
Given a string s
, find the length of the longest substring without repeating characters.
예제
Example 1:
Input: s = "abcabcbb"
Output: 3
Explanation: The answer is "abc", with the length of 3.
Example 2:
Input: s = "bbbbb"
Output: 1
Explanation: The answer is "b", with the length of 1.
Example 3:
Input: s = "pwwkew"
Output: 3
Explanation: The answer is "wke", with the length of 3.
Notice that the answer must be a substring, "pwke" is a subsequence and not a substring.
Example 4:
Input: s = ""
Output: 0
조건
Constraints:
0 <= s.length <= 5 * 104
s
consists of English letters, digits, symbols and spaces.
풀이과정
내 풀이
투 포인터를 활용하여 풀이하였다.
class Solution:
def lengthOfLongestSubstring(self, s: str) -> int:
ans = 0
p1 = 0
p2 = 0
if not s:
return 0
while(1):
if s[p2] in s[p1:p2]:
p1 += 1
else:
p2 += 1
ans = max(ans, p2-p1)
if len(s) <= p2:
break
return ans
해시를 활용한 풀이
class Solution:
def lengthOfLongestSubstring(self, s: str) -> int:
used = {}
max_length = start = 0
for index, char in enumerate(s):
# 이미 등장했던 문자라면 'start' 위치 갱신
if char in used and start <= used[char]:
start = used[char] + 1
else: # 최대 부분 문자열 길이 갱신
max_length = max(max_length, index - start + 1)
# 현재 문자의 위치 삽입
used[char] = index
return max_length
Leave a comment