package main

import "fmt"

func lengthOfNonRepeaTingSubStr(s String) int {
	lastOccurred := make(map[rune]int)
	start := 0
	maxLength := 0
	for i,ch := range []rune(s) {
		if lastI,ok := lastOccurred[ch]; ok && lastI >= start {
			start = lastI + 1
		}
		if i-start+1 > maxLength {
			maxLength = i - start + 1
		}
		lastOccurred[ch] = i
	}
	return maxLength
}

func main() {
	fmt.Println(lengthOfNonRepeaTingSubStr("123123"))
}

  随便写一个名字叫nonrepeat.go的文件,然后再写了一个nonrepeat_test.go

package main

import "tesTing"

func BenchmarkLengthOfNonRepeaTingSubStr(b *tesTing.b) {
	for i := 0; i < b.N; i++ {
		if lengthOfNonRepeaTingSubStr("123123") != 3 {
			b.Errorf("正确的值是:%d",3)
		}
	}
}
go test -bench .  -cpuprofile cpu.out
goos: darwin
goarch: amd64
pkg: gopcp.v2/chapter7/nonrepeat
BenchmarkLengthOfNonRepeaTingSubStr-4           10000000               225 ns/op
PASS
ok      gopcp.v2/chapter7/nonrepeat     2.646s

  

 nonrepeat go tool pprof cpu.out 
Type: cpu
Time: Apr 16,2019 at 6:53pm (CST)
Duration: 2.64s,@R_135_10586@l samples = 2.28s (86.48%)
Entering interactive mode (type "Help" for commands,"o" for options)
(pprof) 

  mac 上面还需要安装图形化的界面工具 https://www.macports.org/install.php ,实在不行参考 https://blog.csdn.net/qq_36847641/article/details/78224910 这个安装盒子

  

(pprof) web
@L_489_10@ to execute dot. Is Graphviz installed? Error: exec: "dot": executable file not found in $PATH
(pprof) 

  

golang 使用pprof进行性能调优

上面分析得出map 访问占用的性能比较高,可以换个用 slice 处理