一、leetcode的算法题
package main
import (
"fmt"
"strings"
)
func lengthOfNonRepeatingSubStr(s string)int{
lastOccurred :=make(map[rune]int)
start:=0
maxLength:=0
//将字符串转成 ASCII 码的切片,循环获取下标与值
for i,ch:=range []rune(s){
if lastI,ok:=lastOccurred[ch];ok && lastI>=start{
start=lastOccurred[ch]+1
}
if i-start+1>maxLength {
maxLength=i-start+1
}
lastOccurred[ch]=i
}
return maxLength
}
func main() {
fmt.Println(
lengthOfNonRepeatingSubStr("abcabcbb"),
lengthOfNonRepeatingSubStr("bbbbb"),
lengthOfNonRepeatingSubStr("阿斯顿法国规划开发阿斯顿发放"))
fmt.Println([]byte("asfsawersd"))
str1:="sdfsad asdfsadf sad;fasfd"
s:=strings.Fields(str1)
for index,value:=range s {
fmt.Println(index,value)
}
}
二、普通测试代码
package main
import "testing"
func TestSubstr(t *testing.T) {
tests:=[]struct{
s string
ans int
}{
{"abssafds",4},
{"pwwkew",3},
{"",0},
{"b",1},
{"bbbbbbbb",1},
{"asadfasdf",4},
}
for _,tt:=range tests {
actual:=lengthOfNonRepeatingSubStr(tt.s)
if actual !=tt.ans{
t.Errorf("got %d for input %s:"+"expected %d",actual,tt.s,tt.ans)
}
}
}
#测试通过
#=== RUN TestSubstr
#--- PASS: TestSubstr (0.00s)
#PASS
#测试错误
#修改错误的数据{"pwwkew",2},
#=== RUN TestSubstr
#--- FAIL: TestSubstr (0.00s)
# leetcode_test.go:21: got 3 for input pwwkew:expected 2
#FAIL
三、性能测试代码
func BenchmarkSubstr(b *testing.B){
s:="黑化肥挥发发灰会花飞灰化肥挥发发黑会飞花"
ans:=8
for i:=0;i<b.N;i++{
actual:=lengthOfNonRepeatingSubStr(s)
if actual !=ans {
b.Errorf("got %d for input %s; "+"expected %d",actual,s,ans)
}
}
}
#执行结果
#goos: windows
#goarch: amd64
#pkg: awesomeProject/leetcode
#运行了100万次,每次运行用了1362ns
#BenchmarkSubstr-8 1000000 1361 ns/op
#PASS