Skip to content

Commit f843d0a

Browse files
committed
feat: 0003.Longest Substring Without Repeating Characters
1 parent 04d8d6e commit f843d0a

File tree

1 file changed

+89
-0
lines changed

1 file changed

+89
-0
lines changed
Lines changed: 89 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,89 @@
1+
// 時間複雜度:
2+
// 空間複雜度:
3+
/*
4+
* @lc app=leetcode.cn id=3 lang=golang
5+
*
6+
* [3] 无重复字符的最长子串
7+
*
8+
* https://leetcode.cn/problems/longest-substring-without-repeating-characters/description/
9+
*
10+
* algorithms
11+
* Medium (39.64%)
12+
* Likes: 10085
13+
* Dislikes: 0
14+
* Total Accepted: 2.8M
15+
* Total Submissions: 7.1M
16+
* Testcase Example: '"abcabcbb"'
17+
*
18+
* 给定一个字符串 s ,请你找出其中不含有重复字符的 最长子串 的长度。
19+
*
20+
*
21+
*
22+
* 示例 1:
23+
*
24+
*
25+
* 输入: s = "abcabcbb"
26+
* 输出: 3
27+
* 解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。
28+
*
29+
*
30+
* 示例 2:
31+
*
32+
*
33+
* 输入: s = "bbbbb"
34+
* 输出: 1
35+
* 解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。
36+
*
37+
*
38+
* 示例 3:
39+
*
40+
*
41+
* 输入: s = "pwwkew"
42+
* 输出: 3
43+
* 解释: 因为无重复字符的最长子串是 "wke",所以其长度为 3。
44+
* 请注意,你的答案必须是 子串 的长度,"pwke" 是一个子序列,不是子串。
45+
*
46+
*
47+
*
48+
*
49+
* 提示:
50+
*
51+
*
52+
* 0 <= s.length <= 5 * 10^4
53+
* s 由英文字母、数字、符号和空格组成
54+
*
55+
*
56+
*/
57+
58+
// @lc code=start
59+
func lengthOfLongestSubstring(s string) int {
60+
slength := len(s)
61+
if slength == 0 || slength == 1 {
62+
return slength
63+
}
64+
65+
// m := make(map[byte]bool, len(s))
66+
// 使用slice優化
67+
m := [256]bool{}
68+
left, right := 0, 0
69+
maxLen := 0
70+
for left < slength {
71+
if ok := m[s[right]]; ok {
72+
m[s[left]] = false
73+
left += 1
74+
} else {
75+
m[s[right]] = true
76+
right += 1
77+
}
78+
if maxLen < (right - left) {
79+
maxLen = right - left
80+
}
81+
if (left+maxLen) >= slength || right >= slength {
82+
break
83+
}
84+
}
85+
return maxLen
86+
}
87+
88+
// @lc code=end
89+

0 commit comments

Comments
 (0)