๋ฌธ์ ๋งํฌ : 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; }
ย
ย
๐ย ์๊ฐ
์.. ๋ฌธ์์ด ๋ง์ง๋ ๋ฌธ์ ๋ ์ธ์ ๋ ์ด๋ ค์ด ๊ฒ ๊ฐ๋ค.
ย
๐ย ๋ถ๋ก
๐ย ์ฐธ๊ณ ๋ฌธํ
ย
๋๊ธ