From 08965a3335a9916b0a36485eaf05c73f31c02800 Mon Sep 17 00:00:00 2001
From: mike <59136831+Mike0121@users.noreply.github.com>
Date: Sat, 1 Jun 2024 16:42:45 +0900
Subject: [PATCH 1/2] Create 3. Longest Substring Without Repeating
Characters.md
https://leetcode.com/problems/longest-substring-without-repeating-characters/description/
---
...Substring Without Repeating Characters.md" | 48 +++++++++++++++++++
1 file changed, 48 insertions(+)
create mode 100644 "\347\253\266\346\212\200\343\203\227\343\203\255\345\260\261\346\264\273\351\203\250PR\347\224\250/3. Longest Substring Without Repeating Characters.md"
diff --git "a/\347\253\266\346\212\200\343\203\227\343\203\255\345\260\261\346\264\273\351\203\250PR\347\224\250/3. Longest Substring Without Repeating Characters.md" "b/\347\253\266\346\212\200\343\203\227\343\203\255\345\260\261\346\264\273\351\203\250PR\347\224\250/3. Longest Substring Without Repeating Characters.md"
new file mode 100644
index 0000000..5246f31
--- /dev/null
+++ "b/\347\253\266\346\212\200\343\203\227\343\203\255\345\260\261\346\264\273\351\203\250PR\347\224\250/3. Longest Substring Without Repeating Characters.md"
@@ -0,0 +1,48 @@
+## Sliding Window(set)による解法 ★
+---
+### 1回目 (3m20s)
+時間計算量: O(N)
+空間計算量: O(N)
+
+```python
+class Solution:
+ def lengthOfLongestSubstring(self, s: str) -> int:
+ left = 0
+ max_length = 0
+ letters_in_windows = set()
+
+ for right in range(len(s)):
+ while s[right] in letters_in_windows:
+ letters_in_windows.discard(s[left])
+ left += 1
+
+ letters_in_windows.add(s[right])
+
+ max_length = max(max_length, right - left + 1)
+
+ return max_length
+```
+
+## dictを使った解法
+---
+時間計算量: O(N)
+空間計算量: O(N)
+
+(あまり旨みはない。indexが必要な時に便利か。)
+```python
+class Solution:
+ def lengthOfLongestSubstring(self, s: str) -> int:
+ left = 0
+ letter_to_index = defaultdict(int)
+ max_length = 0
+
+ for right in range(len(s)):
+ while letter_to_index[s[right]] > 0:
+ letter_to_index[s[left]] -= 1
+ left += 1
+
+ letter_to_index[s[right]] += 1
+ max_length = max(max_length, right - left + 1)
+
+ return max_length
+```
From 97f9d79f8e6d6c2b9858c503074e0168fc41dcee Mon Sep 17 00:00:00 2001
From: mike <59136831+Mike0121@users.noreply.github.com>
Date: Sat, 1 Jun 2024 17:25:22 +0900
Subject: [PATCH 2/2] Update 3. Longest Substring Without Repeating
Characters.md
---
...Substring Without Repeating Characters.md" | 21 +++++++++++++++++++
1 file changed, 21 insertions(+)
diff --git "a/\347\253\266\346\212\200\343\203\227\343\203\255\345\260\261\346\264\273\351\203\250PR\347\224\250/3. Longest Substring Without Repeating Characters.md" "b/\347\253\266\346\212\200\343\203\227\343\203\255\345\260\261\346\264\273\351\203\250PR\347\224\250/3. Longest Substring Without Repeating Characters.md"
index 5246f31..0420e9d 100644
--- "a/\347\253\266\346\212\200\343\203\227\343\203\255\345\260\261\346\264\273\351\203\250PR\347\224\250/3. Longest Substring Without Repeating Characters.md"
+++ "b/\347\253\266\346\212\200\343\203\227\343\203\255\345\260\261\346\264\273\351\203\250PR\347\224\250/3. Longest Substring Without Repeating Characters.md"
@@ -46,3 +46,24 @@ class Solution:
return max_length
```
+
+## dictを使った解法 (indexを記録)
+---
+時間計算量: O(N)
+空間計算量: O(N)
+```python
+class Solution:
+ def lengthOfLongestSubstring(self, s: str) -> int:
+ left = 0
+ letter_to_index = defaultdict(int)
+ max_length = 0
+
+ for right in range(len(s)):
+ if s[right] in letter_to_index and left <= letter_to_index[s[right]]:
+ left = letter_to_index[s[right]] + 1
+
+ letter_to_index[s[right]] = right
+ max_length = max(max_length, right - left + 1)
+
+ return max_length
+```