题目
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.
解法
求最长不重复的字串长度。
解决这道题比较好的思路如下:
- 使用时间复杂度为O(1)的map数据结构存储每一个字符的位置信息。
- 使用两个下标记录不重复的字串的起始和结束位置。
代码如下:
func lengthOfLongestSubstring(s string) int {
if len(s) <= 1{
return len(s)
}
mapTemp := make(map[byte]int)
start,end := 0,0 //记录不含有重复字符子串的起始位置
result := 0
l := len(s)
for end = 0;end<l;end++ {
if val,ok := mapTemp[s[end]];ok{
start = max(start,val+1)
}
mapTemp[s[end]] =end //存储s的每一个字符的位置信息
result = max(result,end-start+1)
}
return result
}
func max(a,b int)int{
if a>b{
return a
}
return b
}