文档开发者中心
我的

leetcode之Go语言——0003 无重复字符的最长子串

源代码文件:0003_length_of_longest_sub_string.go


/*


题目:


给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。


示例 1:


输入: "abcabcbb"

输出: 3

解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。

示例 2:


输入: "bbbbb"

输出: 1

解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。

示例 3:


输入: "pwwkew"

输出: 3

解释: 因为无重复字符的最长子串是 "wke",所以其长度为 3。

     请注意,你的答案必须是 子串 的长度,"pwke" 是一个子序列,不是子串。


*/

package p0003


func LengthOfLongestSubstring(s string) int{

lastAppearMap:=make(map[byte]int)

start:=0

maxLength:=0

for i,ch :=range []byte(s){

if lastAppearIndex,ok:=lastAppearMap[ch];ok && lastAppearIndex >= start{

start=lastAppearMap[ch]+1

}

if i-start+1>maxLength{

maxLength=i-start+1

}

lastAppearMap[ch]=i

}

return maxLength

}


测试代码文件:0003_length_of_longest_sub_string_test.go

package p0003


import "testing"


func TestLengthOfLongestSubstring(t *testing.T) {

length:=LengthOfLongestSubstring("abcabcbb")

if length !=3{

t.Errorf("测试失败,期望值为3,实际返回值为:%d\n",length)

}else{

t.Log("返回值与期望值一致,测试成功")

}

}


func BenchmarkLengthOfLongestSubstring(b *testing.B) {

for i:=0;i<b.N;i++{

LengthOfLongestSubstring("abcabcbb")

}

}



Benchmark测试结果:

点赞
收藏
1
回复
分享
举报
浏览186 发布于2019-12-07 08:03未知归属地
全部评论
最多点赞
最新发布
最早发布
暂无评论
暂无评论
写回答
新增插入模板功能
一键使用模板,快速填写内容,轻松发帖~
知道了
  • 为了保障您的信息安全,请勿上传您的敏感个人信息(如您的密码等信息)和您的敏感资产信息(如关键源代码、签名私钥、调试安装包、业务日志等信息),且您需自行承担由此产生的信息泄露等安全风险。
  • 如您发布的内容为转载内容,请注明内容来源。

我要发帖子

了解社区公约,与您携手共创和谐专业的开发者社区。