【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
}

  

posted on 2018-01-31 10:07  小问号???  阅读(78)  评论(0)    收藏  举报

导航