当前位置: 代码迷 >> 综合 >> go语言版本:LeetCode ——无重复字符的最长子串
  详细解决方案

go语言版本:LeetCode ——无重复字符的最长子串

热度:69   发布时间:2024-01-26 13:38:03.0

解决此题采用的是滑动窗口的解法,所谓窗口,就是一段字符串,通过将字符串一点点向后移动,达到遍历整个

字符串中的子字符串,i是最左边的位置,j是最右边的位置,i和j同时从左边出发,此时字符串长度为1,没有重复

字符,j向后移动一位,遍历子字符串的字符是否有和新添加的字符相等的,没有就记录此时字符串的长度为 [ i , j ],

有就记录 i 的下一位为k,此时新的窗口字符串是[ k , j ],下次循环 k 赋值给 i ,接着 j 往后移动,直到结束,这就

遍历到了每个无重复字符的字符串。

func lengthOfLongestSubstring(s string) int {len := len(s)var i intvar j intk,max := 0,0//j代表最右边的标记位置for j=0; j<len; j++ {//i代表最左边的位置,每次初始化是上一次最后的字符串的最左边的位置for i=k; i<j; i++{//如果相等,记录i的下一个位置,跳出循环if s[i] == s[j] {k = i+1break}}//记录此时字符串的长度m := j-k+1//fmt.Println(m,"\n")//记录最大的长度if m>max {max = m}}return max;
}