-
Notifications
You must be signed in to change notification settings - Fork 0
/
3.py
72 lines (57 loc) · 2.03 KB
/
3.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
'''
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.
Constraints:
0 <= s.length <= 5 * 104
s consists of English letters, digits, symbols and spaces.
'''
# https://leetcode.com/problems/longest-substring-without-repeating-characters/
import unittest
def longest_substring_without_repeating_characters(s):
start = 0
max_length = 0
used_characters = {}
for i, char in enumerate(s):
if char in used_characters and start <= used_characters[char]:
start = used_characters[char] + 1
else:
max_length = max(max_length, i - start + 1)
used_characters[char] = i
return max_length
class TestLongestSubstringWithoutRepeatingCharacters(unittest.TestCase):
def test_example1(self):
s = "abcabcbb"
expected = 3
# Call the function that solves the problem
result = longest_substring_without_repeating_characters(s)
# Assert that the result matches the expected output
self.assertEqual(result, expected)
def test_example2(self):
s = "bbbbb"
expected = 1
# Call the function that solves the problem
result = longest_substring_without_repeating_characters(s)
# Assert that the result matches the expected output
self.assertEqual(result, expected)
def test_example3(self):
s = "pwwkew"
expected = 3
# Call the function that solves the problem
result = longest_substring_without_repeating_characters(s)
# Assert that the result matches the expected output
self.assertEqual(result, expected)
if __name__ == '__main__':
unittest.main()