๋ฌธ์ ๋งํฌ : https://leetcode.com/problems/longest-substring-without-repeating-characters/description/
ย
๐ฅ๏ธย ์์ํ๋ฉฐ
์ผ๋จ ์๋ ๊ทธ๋๋ก ํ์ด๋ฅผ ์์ํ๋ฉด, ํ์ด์ฌ์ผ๋ก๋ ์ฌ๋ผ์ด์ฑ์ผ๋ก ๊ต์ฅํ ์ฝ๊ฒ ํ ์ ์๋ค.
from typing import List class Solution: def lengthOfLongestSubstring(self, s: str) -> int: res = 0 for i in range(len(s)): # ๊ธธ์ด๋ฅผ ์ ์ฅํ ์์ ๋ณ์ tmpres = 0 # substring์ ๋ฌธ์๊ฐ ๋ ๋ค์ด๊ฐ๋์ง ํ์ธ for j in range(i, len(s)): if s[j] in s[i:j]: break tmpres += 1 res = max(res, tmpres) return res s = Solution() print(s.lengthOfLongestSubstring("pwwkew"))
ํ์ง๋ง ์๊ฐ์ด ๋๋ฌด ์ค๋ ๊ฑธ๋ ค์.. ๋ ์ข์ ํ์ด๊ฐ ์๋ ์ถ์ด ์ฐพ์๋ณด๋ค, ์ธ์์ ์ธ ํ์ด๋ฅผ ๋ณด๊ฒ ๋์๋ค.
ย
์ญ์ ์ด๋ฐ ๋ฌธ์ ๋ ์งํฉ์ ์ฌ์ฉํ๋ ๊ฒ ๊ตญ๋ฃฐ์ธ ๊ฒ ๊ฐ๋ค.
from typing import List class Solution: def lengthOfLongestSubstring(self, s: str) -> int: res = 0 visit = set() left = 0 # ์ผ์ชฝ idx # ์ค๋ฅธ์ชฝ idx๋ถํฐ ์์ for right in range(len(s)): # visit์ ์๋ค๋ฉด, visit์์ ์ญ์ ํ๊ณ left ์ธ๋ฑ์ค ์ฆ๊ฐ # left์ right๋ฅผ ์ด์ฉํด ์ ์ฒด ๊ธธ์ด ๊ตฌํจ while s[right] in visit: visit.remove(s[left]) left += 1 # visit์ ๋ฌธ์ ์ถ๊ฐ visit.add(s[right]) res = max(res, right - left + 1) return res s = Solution() print(s.lengthOfLongestSubstring("pwwkew"))
ย
์๋ฅผ ๋ค์ด
s = "pwwkew"์ ๊ฒฝ์ฐ:- ๋ฌธ์
p๋ฅผ ์ฒ๋ฆฌํ ๋visit = {'p'},res = 1.
- ๋ฌธ์
w๋ฅผ ์ฒ๋ฆฌํ ๋visit = {'p', 'w'},res = 2.
- ๋ ๋ค๋ฅธ
w๋ฅผ ๋ง๋๋ฉดvisit์์p๋ฅผ ์ ๊ฑฐํ๊ณl์ ์ด๋,visit = {'w'},res = 2.
- ๋ฌธ์
k๋ฅผ ์ฒ๋ฆฌํ ๋visit = {'w', 'k'},res = 2.
- ๋ฌธ์
e๋ฅผ ์ฒ๋ฆฌํ ๋visit = {'w', 'k', 'e'},res = 3.
- ๋ง์ง๋ง์ผ๋ก
w๋ฅผ ์ฒ๋ฆฌํ ๋visit์์w์ด์ ๋ฌธ์๋ฅผ ์ ๊ฑฐํ๊ณ , ์ต์ข ์ ์ผ๋กvisit = {'k', 'e', 'w'},res = 3.
ย
โ๏ธย Python
from typing import List class Solution: def lengthOfLongestSubstring(self, s: str) -> int: res = 0 visit = set() left = 0 # ์ผ์ชฝ idx # ์ค๋ฅธ์ชฝ idx๋ถํฐ ์์ for right in range(len(s)): # visit์ ์๋ค๋ฉด, visit์์ ์ญ์ ํ๊ณ left ์ธ๋ฑ์ค ์ฆ๊ฐ # left์ right๋ฅผ ์ด์ฉํด ์ ์ฒด ๊ธธ์ด ๊ตฌํจ while s[right] in visit: visit.remove(s[left]) left += 1 # visit์ ๋ฌธ์ ์ถ๊ฐ visit.add(s[right]) res = max(res, right - left + 1) return res s = Solution() print(s.lengthOfLongestSubstring("pwwkew"))
โ๏ธย C++
#include <iostream> #include <set> #include <string> using namespace std; class Solution { public: int lengthOfLongestSubstring(string s) { int res = 0; set<char> visit; int left = 0; for (int right = 0; right < s.length(); ++right) { while (visit.find(s[right]) != visit.end()) { visit.erase(s[left]); left++; } visit.insert(s[right]); res = max(res, right - left + 1); } return res; } }; int main() { Solution solution; string test = "pwwkew"; cout << solution.lengthOfLongestSubstring(test) << endl; return 0; }
ย
ย
๐ย ์๊ฐ
์.. ๋ฌธ์์ด ๋ง์ง๋ ๋ฌธ์ ๋ ์ธ์ ๋ ์ด๋ ค์ด ๊ฒ ๊ฐ๋ค.
ย
๐ย ๋ถ๋ก
๐ย ์ฐธ๊ณ ๋ฌธํ
ย
![[Leetcode] 3. Longest Substring Without Repeating Characters](https://reo91004.notion.site/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2Fb4dac9d0-810c-47c4-800c-0ca10b8d0529%2Fde29f40a-05a3-4aec-b112-7e56072966a0%2FLeetCode_Logo_Black.png?table=block&id=c84573d1-e1a2-488b-8b11-c0c6333e4c08&cache=v2)
![[Leetcode] 3. Longest Substring Without Repeating Characters](https://reo91004.notion.site/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2Fb4dac9d0-810c-47c4-800c-0ca10b8d0529%2F45a3427e-47fb-412a-a090-3bf6d1afdb04%2Fleetcode.png?table=block&id=c84573d1-e1a2-488b-8b11-c0c6333e4c08&cache=v2)

๋๊ธ