采纳答案成功!
向帮助你的同学说点啥吧!感谢那些助人为乐的人
基本测试都是优化后比优化前还慢,偶尔优化后会快。为什么呢?
附图
https://chrome.google.com/webstore/
优化前
优化后
用的是你的同样的代码,性能是有提升的,我的:go version: 1.10 电脑配置:i7 2.2GHZ 内存: 16G,
代码应该是没问题的,希望对你有所帮助。
你有反复测试了么,我是反复测试了,偶尔的确是优化后快,但是基本还是优化前更快,我机子i7-7700, 8g内存的。我晚上再回去调试看下
我试试
测了四组: 优化前:1.18 1.20 1.18 1.15 优化后:0.58 0.63 0.86 0.87
func BenchmarkSubstr(b *testing.B) {
s :=
"黑化肥挥发发挥灰化肥挥发发黑会飞话"
maxLength := 8
for
i := 0; i < 11; i++ {
s = s + s
}
//b.Logf("len(s) = %d", len(s))
b.ResetTimer()
// b.N = 4000000
i := 0; i < b.N; i++ {
actual := nonRepeatingStr(s)
if
actual != maxLength {
b.Errorf(
"got %d for input %s; expected %d"
, actual, s, maxLength)
package main
import (
"fmt"
)
var lastOccurred = make([]
int
, 0xffff)
// 空间换时间 65535; lastOccurred[0x65]
func nonRepeatingStr(s string)
{
// 每个字母最后出现的位置
//lastOccurred := make(map[rune]int)
i := range lastOccurred {
lastOccurred[i] = -1
// 子字符串开始的位置
start := 0
// 子字符串的长度
maxLength := 0
i, ch := range []rune(s) {
// 当前字符,从开始位置,如果出现过;开始位置从当前字符出现过的位置+1
//if lastI, ok := lastOccurred[ch]; ok && lastI >= start {
lastI := lastOccurred[ch]; lastI != -1 && lastI >= start {
start = lastOccurred[ch] + 1
i-start+1 > maxLength {
maxLength = i - start + 1
lastOccurred[ch] = i
return
maxLength
代码就是跟着老师敲的啊,就算贴代码有什么用
说不定你会有什么遗漏的细节,或者环境有差异
你的想法本身也没错,我也把代码追加了
登录后可查看更多问答,登录/注册
语法+分布式爬虫实战 为转型工程师量身打造
3.9k 14
795 1
2.2k 1
1.2k 12
购课补贴联系客服咨询优惠详情
慕课网APP您的移动学习伙伴
扫描二维码关注慕课网微信公众号