题目描述

给定一个字符串s,请你找出其中不含有重复字符的最长子串的长度。

示例

示例一

输入: s = "abcabcbb"
输出: 3 
解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。

示例二

输入: s = "bbbbb"
输出: 1
解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。

示例三

输入: s = "pwwkew"
输出: 3
解释: 因为无重复字符的最长子串是 "wke",所以其长度为 3。
     请注意,你的答案必须是 子串 的长度,"pwke" 是一个子序列,不是子串。

前提约束

  • 0 <= s.length <= 5 * 10^4
  • s 由英文字母、数字、符号和空格组成

单元测试

还是一样,先编写测试用例

package lengthOfLongestSubstring

import (
    "testing"
)

func TestLengthOfLongestSubstring(t *testing.T) {
    tests := []struct{
        name     string
        s         string
        r         int
        wantErr bool
    }{
        {
            "abcabcbb*3",
            "abcabcbb",
            3,
            false,
        },
        {
            "bbbbb*1",
            "bbbbb",
            1,
            false,
        },
        {
            "pwwkew*3",
            "pwwkew",
            3,
            false,
        },
        {
            "au*2",
            "au",
            2,
            false,
        },
    }

    for _, tt := range tests{
        t.Run(tt.name, func(t *testing.T) {
            x := LengthOfLongestSubstring(tt.s)
            if x != tt.r{
                t.Errorf("结果不符合预期,want:%d, got:%d", tt.r, x)
            }
        })
    }
}

解决方案

package lengthOfLongestSubstring

func LengthOfLongestSubstring(s string) int {
    if len(s) == 0 || len(s) == 1 {
        return len(s)
    }
    length := 0
    n := len(s)
    for i:=0; i < n; i++{
        hmap := make(map[byte]int)
        hmap[s[i]] = i
        for j := i + 1; j < n; j++ {
            if _, ok := hmap[s[j]]; ok {
                //fmt.Printf("find it :%v\n", arr[j])
                break
            } else {
                hmap[s[j]] = j
                //fmt.Printf("insert into:hmap[%v]=%d\n", arr[j], j)
            }
            //fmt.Printf("size of hmap:%d\n", len(hmap))

        }
        if len(hmap) > length {
            length = len(hmap)
        }
    }
    return length
}

初次尝试的解决方案并不理想,执行耗时和内存占用都排名靠后。
2022-03-06T03:50:43.png

题目来源

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/longest-substring-without-repeating-characters
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。