龙空技术网

go 实现算法题:无重复字符的最长子串

aurorac 124

前言:

此刻你们对“最久未使用算法例题”大体比较注意,各位老铁们都需要了解一些“最久未使用算法例题”的相关资讯。那么小编同时在网摘上收集了一些对于“最久未使用算法例题””的相关内容,希望看官们能喜欢,大家一起来了解一下吧!

在 Go 语言中实现无重复字符的最长子串算法,可以使用滑动窗口的思想。

首先,我们可以定义两个变量 start 和 end,分别表示当前窗口的开始位置和结束位置。然后,我们可以使用一个 map 来记录每个字符出现的位置。每次将 end 向右移动一位时,我们就更新 map 中当前字符的位置,同时判断是否存在重复字符。如果存在,就将 start 移动到重复字符的下一位,继续滑动窗口。

下面是使用 Go 语言实现无重复字符的最长子串的示例代码:

func lengthOfLongestSubstring(s string) int {    // 定义两个变量表示窗口的开始位置和结束位置    start, end := 0, 0    // 定义一个 map 记录每个字符出现的位置    m := make(map[byte]int)    // 定义一个变量记录最长子串的长度    maxLen := 0    // 循环移动窗口    for end < len(s) {        // 获取当前字符        c := s[end]        // 如果当前字符已经在 map 中,就将 start 移动到重复字符的下一位        if pos, ok := m[c]; ok {            start = max(start, pos + 1)        }        // 更新 map 中当前字符的位置        m[c] = end        // 更新最长子串的长度				maxLen = max(maxLen, end-start+1)				// 将 end 向右移动一位				end++			}  return maxLen  }

标签: #最久未使用算法例题