代码一://处理不了字符串长度为1的情况
func lengthOfLongestSubstring(s string) int {
m := map[byte]int{}
n :=len(s)//遍历的次数
rk, ans := 0, 0
for i := 0;i < n;i++{
if i != 0 {
delete(m,s[i-1])
}
for rk + 1 < n && m[s[rk]] == 0{
m[s[rk]] ++
rk ++
}
ans = max(ans,rk-i)
}
return ans
}
func max(x,y int) int{
if x > y {
return x
}
return y
}
果输入的字符串为“a”,一个单个的字符串,此时n=1,即第一个for循环会执行1次,但是第二个for不会执行,所以rk(右指针)和第几次的i一直是重叠的,所以用rk(右指针)来减去i得不到想要的结果。输出就是0。
修改过后的代码:
代码二:
func lengthOfLongestSubstring(s string) int {
m := map[byte]int{}//首先使用一个map来存放键值对,用来记录是否存放过这个字符
n :=len(s)//遍历的次数
rk, ans := -1, 0 //右指针来作为一个遍历,ans作为目前最长的字符串长度,会随着遍历来改变。
for i := 0;i < n;i++{
if i != 0 {
delete(m,s[i-1])
}
for rk + 1 < n && m[s[rk+1]] == 0{//rk一直在字串的最后一个位置
m[s[rk+1]] ++
rk ++
}
ans = max(ans,rk+1-i)
}
return ans
}
func max(x,y int) int{
if x > y {
return x
}
return y
}
代码三:也可以通过案例
func lengthOfLongestSubstring(s string) int {
m := map[byte]int{}
n :=len(s)//遍历的次数
rk, ans := 0, 0
if n == 1{
return 1
}
for i := 0;i < n;i++{
if i != 0 {
delete(m,s[i-1])
}
for rk < n && m[s[rk]] == 0{
m[s[rk]] ++
rk ++
}
ans = max(ans,rk-i)
}
return ans
}
func max(x,y int) int{
if x > y {
return x
}
return y
}