go实现 无重复字符的最长子串

package main

import (
"fmt"
"strings"
)
/**
*窗口可以在两个边界移动一开始窗口大小为0
*随着数组下标的前进窗口的右侧依次增大
*每次查询窗口里的字符,若窗口中有查询的字符
*窗口的左侧移动到该字符加一的位置
*每次记录窗口的最大程度
*重复操作直到数组遍历完成
*返回最大窗口长度即可
*/
func lenString(s string) int {
//var Length []int
var Length int
var s1 string
left := 0
right := 0
s1 = s[left:right]
for ;right<len(s);right++ {
/**
*IndexByte函数的功能是检查字节c在s中第一次出现的位置索引;
*如果s中第一次出现则返回-1,第二次出现则返回第二次出现的位置索
*/
index := strings.IndexByte(s1,s[right])
//当某个字符出现第二次的时候返回当前索引加1的位置
if index != -1{
left = index+1
fmt.Println(s1)
}
//字符串长度截取 left起始位置 right截止位置
s1 = s[left:right+1]
//获取到的长度如果大于先前的长度,就替换直到获取到最长字符串
if len(s1) > Length{
Length = len(s1)
}
}
return Length
}

func main() {
s := lenString("abadesse")
fmt.Print("\n",s,"\n")
}
posted @ 2020-09-26 11:17  爱搬砖的小码农  阅读(487)  评论(0编辑  收藏  举报