leetcode刷题之 无重复字符的最长子串(go实现)
2019-07-03 21:43
399 查看
版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/u010110632/article/details/94590694
题目来自于LeetCode(https://leetcode-cn.com)。
给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。
示例 1:
输入: "abcabcbb"
输出: 3
解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。
示例 2:
输入: "bbbbb"
输出: 1
解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。
示例 3:
输入: "pwwkew"
输出: 3
解释: 因为无重复字符的最长子串是 "wke",所以其长度为 3。
请注意,你的答案必须是 子串 的长度,"pwke" 是一个子序列,不是子串。
解法一:暴力法(耗时468ms,内存6.6M)
两重循环对每个元素进行判断,若存在于map中,说明碰到相同的了,退出内层循环;反之则将元素加入map,计数加1;比较max和num,将最大值赋给max。
代码如下:
[code]func lengthOfLongestSubstring(s string) int { slen := len(s) max := 0 for i:=0;i<slen;i++ { res := make(map[string]string) num := 0 for j:=i;j<slen;j++{ str := s[j:j+1] if _,ok:=res[str];!ok { res[str] = str num++ }else{ break } } if max < num{ max = num } } return max }
解法二:设置标量,进行判断(耗时36ms,内存2.6M)
考虑到两层循环,时间复杂度肯定为O(n方),就思考用一个循环解决,于是设置两个标量,用来进行循环对比,时间复杂度降低到O(n)。思路看代码注释。strings.Index实际可能用到循环,所以时间复杂度还是可能为O(n方)
代码如下:
[code]func lengthOfLongestSubstring(s string) int { slen := len(s) if slen == 1 || slen == 0 { return slen } max := 0 start := 0 end := 1 for start < slen && end < slen {//循环条件 var l = 0 // fmt.Println("----",start,end,s[start:start+1],s[end:end+1],max) if s[start] == s[end]{//相等,说明不重复字串到此为止,算出长度 l = end - start if max < l { max = l } start++ end = start + 1 }else{ end++ l = end - start if max < l { max = l } if max == slen {//最大的等于了长度,则说明,最长字串为自己 break } if end >= slen{//如果end大于等于了截止条件,退出 break } str := s[start:end] substr := s[end:end+1] index := strings.Index(str,substr) if index != -1 {//前面的字串含有了新的字符,则说明有了,将start置为start+index+1,end置为start+1 start = start + index +1 end = start + 1 } } // fmt.Println("++++",start,end,max) } return max }
相关文章推荐
- LeetCode3. python实现:无重复字符的最长子串问题☆☆
- leetcode之3. 无重复字符的最长子串python实现
- LeetCode题目C++实现:3. 无重复字符的最长子串
- leetcode之旅—无重复字符的最长子串go语言版
- 用python写leetcode【13】 -- 至少有K个重复字符的最长子串(395)
- Leetcode(C++)——3. 无重复字符的最长子串
- [Leetcode] 3.无重复字符的最长子串
- 【LeetCode】JavaScript -----无重复字符的最长子串
- 【leetcode每日一题】【2019-04-10】3.无重复字符的最长子串
- Leetcode——3. 无重复字符的最长子串
- 【Java】【LeetCode 3】 Longest Substring Without Repeating Characters 最长无重复字符的子串
- 【Leetcode一刷】3.无重复字符的最长子串
- [leetcode]无重复字符的最长子串
- golang实现寻找最长不含有重复字符的子串
- LeetCode 3. 无重复字符的最长子串
- LeetCode-03 :无重复字符的最长子串长度
- 无重复字符的最长子串 - LeetCode
- LeetCode 3.Longest Substring Without Repeating Characters 无重复字符的最长子串 Python3 三种解法
- leetcode 3. 无重复字符的最长子串
- LeetCode[3] 无重复字符的最长子串