image.png

    image.png

    image.png

    1. package main
    2. import (
    3. "fmt"
    4. )
    5. func lengthOfLongestSubstring4(s string) int {
    6. freq := make([]int,128)
    7. var res = 0
    8. start,end := 0,-1
    9. for start<len(s){
    10. if end+1<len(s)&&freq[s[end+1]] == 0{
    11. end++
    12. freq[s[end]]++
    13. }else{
    14. freq[s[start]]--
    15. start++
    16. }
    17. res = max(res,end-start+1)
    18. }
    19. return res
    20. }
    21. func max(i,j int)int{
    22. if i>j{
    23. return i
    24. }else{
    25. return j
    26. }
    27. }
    28. func lengthOfLongestSubstring2(s string) int{
    29. m :=make(map[byte]int) //定义map
    30. max :=0
    31. start :=0
    32. for i :=range s{
    33. v,ok := m[s[i]]
    34. if ok {
    35. j := start
    36. for ;j<=v;j++{
    37. delete(m,s[j])
    38. }
    39. start =j
    40. }
    41. m[s[i]] = i
    42. if max<i-start+1 {
    43. max = i-start+1
    44. }
    45. }
    46. return max
    47. }
    48. func lengthOfLongestSubstring3(s string) int{
    49. m := make(map[byte]int)
    50. var r []byte //窗口数据
    51. l :=0
    52. for i :=range s{
    53. if j,ok:=m[s[i]];ok {
    54. if i-j>len(r) {
    55. r =r[i-j:]
    56. }
    57. }else {
    58. r = append(r,s[i])
    59. }
    60. m[s[i]] = i
    61. l = max(l,len(r))
    62. }
    63. return l
    64. }
    65. func lengthOfLongestSubstring1(s string) int{
    66. if len(s)==0 {
    67. return 0
    68. }
    69. ans := 0 // 默认就是1了
    70. m := map[byte]int{}
    71. start := -1
    72. for i:=0 ;i<len(s);i++{// 遍历字符串
    73. if index,ok := m[s[i]];ok {//存在
    74. start = max(start,index)//但是要保证起始索引是递增的
    75. }
    76. ans = max(ans,i-start)
    77. m[s[i]]=i
    78. }
    79. return ans
    80. }
    81. func main() {
    82. fmt.Println(lengthOfLongestSubstring(""))//1
    83. fmt.Println(lengthOfLongestSubstring1("au"))//2
    84. fmt.Println(lengthOfLongestSubstring1("abcabcbb"))//3
    85. fmt.Println(lengthOfLongestSubstring1("bbbb"))//1
    86. fmt.Println(lengthOfLongestSubstring1("pwwkew"))//3
    87. fmt.Println(lengthOfLongestSubstring1("abba"))//2
    88. fmt.Println(lengthOfLongestSubstring1("bpfbhmipx"))//7
    89. fmt.Println(lengthOfLongestSubstring1("eeydgwdykpv"))//7
    90. }