-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy path3.zig
56 lines (45 loc) · 1.14 KB
/
3.zig
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
const std = @import("std");
const eq = std.testing.expectEqual;
fn lengthOfLongestSubstring(s: []const u8) !u32 {
if (s.len == 0) {
return 0;
}
if (s.len == 1) {
return 1;
}
const allocator = std.heap.page_allocator;
var temp = std.AutoHashMap(u8, void).init(allocator);
defer temp.deinit();
try temp.put(s[0], {});
var longest: u32 = 1;
var _longest: u32 = 1;
for (s[1..]) |letter| {
if (temp.contains(letter)) {
if (_longest > longest) {
longest = _longest;
}
_longest = 1;
temp.clearAndFree();
try temp.put(letter, {});
continue;
}
try temp.put(letter, {});
_longest += 1;
}
if (_longest > longest) {
longest = _longest;
}
return longest;
}
test "abcabcbb" {
const s: []const u8 = "abcabcbb";
try eq(3, try lengthOfLongestSubstring(s));
}
test "bbbbb" {
const s: []const u8 = "bbbbb";
try eq(1, try lengthOfLongestSubstring(s));
}
test "pwwkew" {
const s: []const u8 = "pwwkew";
try eq(3, try lengthOfLongestSubstring(s));
}