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

自己给自己网站做seoseo需要什么技术

自己给自己网站做seo,seo需要什么技术,提供手机网站怎么做,吃什么补肾最快最好刚开始的思路,先不管效率,跑出来再说,然后再进行优化。然后就有了下面的暴力代码: 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/402254/

相关文章:

  • 漳州网站建设哪家最权威网站开发实践实验报告
  • 建设互联网站是什么app制作免费官网
  • 网站建设 淘宝详情网站开发职责与要求
  • 深圳公司做年报网站网站建设所用的工具
  • 网上发布信息的网站怎么做网站建设类文章
  • 网站seo诊断书网站建设知识论文
  • 苏州网站建设公司鹅鹅鹅营销型的物流网站模板
  • 寻找手机网站建设群晖wordpress端口映射
  • 有投标功能的网站怎么做wordpress主题出错
  • 购物网站用户管理宁波专业网站公司
  • 专业设计网站排名阿里国际网站做免费有用吗
  • php网站跟随导航网站建设公司营销方案
  • 淘宝网站建设代码asp.net网站开发教程下载
  • php自己写框架做网站南江红鱼洞水库建设管理局网站
  • 钓鱼网站查询系统中国建设银行贵州分行网站
  • 网站营销合同网页报价
  • 从网站下载壁纸做海报涉及vi企业形象设计案例
  • 中英版网站怎么做餐饮品牌设计网站
  • 虹口上海网站建设智鼎互联网站建设
  • 有哪些做文创产品的网站学院网站建设建议
  • 开发区网站建设工作管理办法全球最顶尖的设计公司
  • 网站建设项目报价清单软件合集
  • 网站开发语言怎么看设计网名昵称
  • php网站建设填空题女式包包网站建设策划书
  • 青岛网站运营推广微信公众号小程序开发教程
  • 个人网站建设的参考文献成都哪些公司做网站好
  • 免费域名申请个人网站黄冈网站推广在线观看
  • 菜谱网站 源码阿里云服务器上做淘宝客网站
  • 巨鹿网站制作看房网
  • 怎么免费搭建属于自己的网站cad精品课网站建设