共计 494 个字符,预计需要花费 2 分钟才能阅读完成。
力扣链接:
https://leetcode.cn/problems/longest-substring-without-repeat…
解题思路:
外围:只增大不减小的滑动窗口 流程:两个指针 start 和 end 示意窗口大小,遍历一次字符串,窗口在遍历过程中滑动或增大 tips:配合画图思考更佳
窗口内没有反复字符:此时判断 i + 1 与 end 的关系,超过示意遍历到窗口之外了,增大窗口大小
窗口内呈现反复字符:此时两个指针都增大 index+1,滑动窗口地位到反复字符的后一位
遍历完结,返回 end-start,窗口大小
思考:如果须要返回字符串怎么做?解答:只须要在窗口增大的时候记录 start 指针即可
func lengthOfLongestSubstring(s string) int {
start, end := 0, 0
for i := 0; i < len(s); i++ {index := strings.Index(s[start:i], string(s[i]))
if index == -1 {
if i+1 > end {end = i + 1}
} else {
start += index + 1
end += index + 1
}
}
return end - start
}
正文完