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

徐州好点的做网站的公司seo网站关键词优化报价

徐州好点的做网站的公司,seo网站关键词优化报价,WordPress付费阅读文章,银川网站建设那家公司比较好刚开始的思路,先不管效率,跑出来再说,然后再进行优化。然后就有了下面的暴力代码: 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.hkea.cn/news/321804/

相关文章:

  • 建设厅安全员证书查询网站外链seo推广
  • 邢台手机网站建设服务百度查重软件
  • 网站开发开题报告ppt竞价运营是做什么的
  • 网站代理怎么做的网站推广策划思路
  • 长沙网站seo公司百度权重5的网站能卖多少钱
  • 常德网站开发百度推广登录首页网址
  • 网站建设软件设计推广官网
  • 网站运营阶段站长之家app
  • discuz网站标题百度广告推广价格
  • 广州学校论坛网站建设疫情排行榜最新消息
  • 古董手表网站网络营销的主要方式和技巧
  • 做公司网站要那些资料百度电脑版下载官方
  • 定州网站建设公司企业网站源码
  • 0基础1小时网站建设教程如何给自己的公司建网站
  • 成都网站建设s1emens电商平台怎么加入
  • 六合哪家做网站建设域名注册查询软件
  • 网站建设的方案费用2023年新冠疫情最新消息
  • 九星市场做网站快速将网站seo
  • 长春做网站推广的公司提升神马关键词排名报价
  • 金融网站cms百度网盘客服电话人工服务
  • 美观网站建设物美价廉seo网站优化专员
  • 网站设计应该怎么做推广软文代写
  • 网站建设工作室发展百度收录教程
  • 没有网站 可以做百度口碑吗成都网站制作
  • 医院系统网站建设百度宁波营销中心
  • 网站劫持代码杭州互联网公司排名榜
  • 做网站找哪个部门吸引人的推广标题
  • 网站制作软件名字线做竞价推广代运营公司
  • avada如何做中英文网站沈阳百度推广排名优化
  • 做网站品长沙网络营销公司排名