简单算法内部原理,求教

adriel · · 530 次点击 · 开始浏览    置顶
给定一个 haystack 字符串和一个 needle 字符串,在 haystack 字符串中找出 needle 字符串出现的第一个位置 (从 0 开始)。如果不存在,则返回 -1。 // 1 ``` go func strStr(haystack string, needle string) int { if len(needle) == 0 { return 0 } var i, j int // i不需要到len-1 for i = 0; i < len(haystack)-len(needle)+1; i++ { for j = 0; j < len(needle); j++ { if haystack[i+j] != needle[j] { break } } // 判断字符串长度是否相等 if len(needle) == j { return i } } return -1 } ``` // 2 ```go func strStr1(haystack string, needle string) int { if len(needle) == 0 { return 0 } var i int for i = 0; i < len(haystack)-len(needle)+1; i++ { if haystack[i:i+len(needle)] == needle{ return i } } return -1 } ``` // main ```go func main() { var hay = "cdacdacdcdcdcdacbcdefdsaFdsavf"; var nee = "cde"; start_ts := time.Now() var i int for i=0; i<1000000; i++{ strStr(hay, nee) } fmt.Println(time.Since(start_ts)) start_ts = time.Now() var j int for j=0; j<1000000; j++{ strStr1(hay, nee) } fmt.Println(time.Since(start_ts)) } ``` 结果: strStr: 23.045706ms strStr1: 55.945008ms 2比1慢了两倍,是因为底层在比较两个字符串比较慢吗?

有疑问加站长微信联系(非本文作者)

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:701969077

530 次点击  
加入收藏 微博
4 回复  |  直到 2021-07-24 13:25:55
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传