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")
}