最長の部分文字列を繰り返すことなくLeetCode-0003文字

タイトル

文字列を考えると、あなたは長さが最も長い部分文字列[]繰り返し文字が含まれていないかを調べます。

例1:

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

例2:

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

例3:

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

请注意,你的答案必须是【子串】的长度,"pwke" 是一个子序列,不是子串。

アイデア解析

時間効率が考慮されていない、貧しいブルート力です。

文字列長に設けられたn、全ての元の文字列とする対象文字サブストリングの要件の可能性を持つ最初のライン:0,1、......、N-1。順次[K、*)において、k = 0,1、...、n-1個の缶をサブストリング横切ります。

答え

func lengthOfLongestSubstring(s string) int {
    chars := []rune(s)
    n := len(chars)
    if n == 0 {
        return 0
    }

    res := 1

    for i := 0; i < n; i++ {
        // 检查以 i 开头的字串是否唯一

        m := map[rune]int{}
        m[chars[i]] = i

        curr := 1 // 本次循环找到的最大长度

        for j := i + 1; j < n; j++ {
            if _, in := m[chars[j]]; in {
                break
            } else {
                m[chars[j]] = j
                curr++
            }
        }

        if curr > res {
            res = curr
        }
    }

    return res
}

おすすめ

転載: www.cnblogs.com/jthmath/p/12345429.html