【LeetCode】3. Longest Substring Without Repeating Characters
传送门:https://leetcode.com/problems/longest-substring-without-repeating-characters/description/
解析:定义一个头指针,记录当前子串的首位。尾指针不需要记录,遍历的时候,就相当于尾指针。当遇到已经出现过的字符时,就开始从当前的首位开始进行遍历,并逐一从集合中删除,直到遍历到和当前字符相同的位置。
func lengthOfLongestSubstring(s string) int {
result := 0
len := len(s)
set := [128]int{} //这里直接使用int数组即可,map的话速度会慢很多
head := 0
cnt := 0
for i := 0; i < len; i++ {
ch := s[i]
if 0 == set[ch] {
cnt++
set[ch] = 1
if cnt > result {
result = cnt
}
} else {
for ; head < i; head++ {
set[s[head]] = 0
cnt--
if(s[i] == s[head]) {
head++
set[s[i]] = 1
cnt++
break
}
}
}
}
return result
}
浙公网安备 33010602011771号