当前位置: 首页 > news >正文

环保网站模板潍坊哪家网站制作公司好

环保网站模板,潍坊哪家网站制作公司好,在线网页代理网址,浙江个人网站备案刚开始的思路,先不管效率,跑出来再说,然后再进行优化。然后就有了下面的暴力代码: func lengthOfLongestSubstring(s string) int {// count 用来记录当前最长子串长度var count int// flag 用来对下面两个 if 语句分流var flag …

刚开始的思路,先不管效率,跑出来再说,然后再进行优化。然后就有了下面的暴力代码:

func lengthOfLongestSubstring(s string) int {// count 用来记录当前最长子串长度var count int// flag 用来对下面两个 if 语句分流var flag int = 0// for 对字符串进行遍历for i := 0; i < len(s); i++ {// mark 用来记录当前子串,初始为当前遍历遇到的第一个字符mark := string(s[i])// 这个 for 循环用来接着 mark 往后遍历,如果遇到的字符不在 mark 里,就往 mark 后面接for j := i + 1; j < len(s); j++ {// strings.Contain(A string, B string) 用来判断 A 中是否有 B,有返回 true, 没有返回 falseif strings.Contains(mark, string(s[j])) == true {// 有的话就 break, 当前是一个完整的无重复子串,再往后接就重复了break}if strings.Contains(mark, string(s[j])) == false {// 没有说明还能接着往后接,就继续遍历mark += string(s[j])}}if flag == 0 {// flag == 0 表示这是该字符串遇到的第一个无重复子串,把长度记录下来count = len(mark)flag = 1} else if flag == 1 {// flag == 1 表示这以及不是第一个子串了,那么就计算当前无重复子串的长度// 和原先比较,更长的话就重新赋值给 count, 否则就不重新赋值if count < len(mark) {count = len(mark)}}}return count
}

跑是跑出来了,时间 300ms (仅超过 5% 用户),内存 6.44MB (仅超过 7% 用户),那我得优化以下。我寻思能不能用字符指针,让源代码减少一个 for 循环?emmm 然后我就开始写代码,但是我发现指针并不能减少一个 for 循环,因为始终需要一个 for 来遍历子串起始位置,另一个 for 用来移动指针,写都写了,就上代码吧:

package mainimport ("fmt""strings""unsafe"
)func lengthOfLongestSubstring(s string) int {// 先将字符串变成字符数组,采用用指针遍历bytes := []byte(s)// 定义字符指针var bytePtr *byte// flag 和 count 的作用上一版程序说过了,不赘述var flag int = 0var count intfor i := 0; i < len(s); i++ {mark := string(s[i])for j := i + 1; j < len(s); j++ {// 指针指向 bytes[j] 位置的元素// golang 这种字符指针很麻烦,必须用 unsafe.Pointer() 进行转换bytePtr = (*byte)(unsafe.Pointer(&bytes[j]))if strings.Contains(mark, string(*bytePtr)) == false {// 如果该字符不在前面的子串中,则加入mark += string(*bytePtr)// 指针后移一位bytePtr = (*byte)(unsafe.Pointer(uintptr(unsafe.Pointer(bytePtr)) + 1))}if strings.Contains(mark, string(*bytePtr)) == true {break}}if flag == 0 {count = len(mark)flag = 1} else if flag == 1 {if count < len(mark) {count = len(mark)}}}return count
}func main() {var s = "pwwkew"fmt.Println(lengthOfLongestSubstring(s))
}

笑死了,时间 216ms (仅超过 5.84% 用户),内存 6.46MB (仅超过 6.98% 用户),几乎没有优化。我想着看看大佬都是怎么写的吧。发现大佬用的是滑动窗口,确实酷,来个大佬讲解视频的链接 点这里跳转,然后下面是代码,看不懂的朋友可以进行单步调试,我是边调边画图理解的。该程序运行时间 0ms,占用内存 2.26MB ,比我原方案效率高太多了,妙不可言。

package mainimport ("fmt"
)func lengthOfLongestSubstring(s string) (ans int) {window := [128]bool{} // 也可以用 map,这里为了效率用的数组left := 0for right, c := range s {for window[c] { // 加入 c 后,窗口内会有重复元素window[s[left]] = falseleft++}window[c] = trueans = max(ans, right-left+1) // 更新窗口长度最大值}return
}func max(a, b int) int {if b > a {return b}return a
}func main() {var s = "pwwkew"fmt.Println(lengthOfLongestSubstring(s))
}
http://www.yayakq.cn/news/456949/

相关文章:

  • 有人做几个蝎子养殖门户网站网站关键字代码
  • 南昌制作手机网站抖音开放平台工会
  • 潍坊网站建设壹品网络301重定向手机网站
  • 找工作哪个网站好找详情页设计模板网站
  • 丹阳做网站的公司优质友情链接
  • 百度网站站长工具wordpress图片外链
  • 做网站前台需要什么软件Joomla外贸网站模板
  • 网站跟app的区别是什么意思新站seo快速排名 排名
  • 搭建网站一个服务器和域名it培训班大概需要多少钱
  • 柳州本地做网站的公司网站开发 ide
  • 怎样自己做淘宝客网站孝感市建设网站
  • 大型小说网站开发语言wordpress远程自动下载图片
  • wordpress编辑器插件广西网站推广优化
  • 做刷单哪个网站找小白青岛建设网站企业
  • 建设公司网站多少钱安徽电子健康卡小程序
  • 毕节网站建设推广关键词优化哪家好
  • 上海网站制作建设多少钱阿里巴巴建站多少钱
  • 肖鸿昌建筑网站iis 浏览网站
  • 营销网站建设公司排名云搜索网页版入口
  • 自己做网站转发新闻违法么wordpress防止f12插件
  • 营销创意网站品牌形象推广
  • 手机网站翻译成中文专业网页制作
  • 江西专业南昌网站建设企业网站宣传
  • 黄骅市第五中学百度网站优化 件
  • 重庆沙坪坝网站建设上海企业名称
  • 做logo找灵感的网站wordpress工单
  • 特卖网站怎么做wordpress php7 速度
  • 手游网站怎么做客户网站建设问题
  • 网页设计公司的市场评估seo 对手 网站 自然
  • 兰州做网站设计类素材网站