majianyu
3/8/2018 - 6:11 AM

lengthOfNonRepeatingSubStr

求一个字符串中最长的不重复子串

package main

import "fmt"

func lengthOfNonRepeatingSubStr(s string) (int, string) {
    lastOccurred := make(map[rune]int)
    var sub string
    start := 0
    maxLength := 0
    for i, ch := range []rune(s) {
        if lastI, ok := lastOccurred[ch];
            ok && lastI >= start {
            start = lastI + 1
        }
        if i-start+1 > maxLength {
            maxLength = i - start + 1
            sub = string([]rune(s)[start : i+1])
        }
        lastOccurred[ch] = i

    }
    return maxLength, sub
}
func main() {
    fmt.Println(lengthOfNonRepeatingSubStr("fjwopiejfowjfonzsklf"))
    fmt.Println(lengthOfNonRepeatingSubStr("abcabcab"))
    fmt.Println(lengthOfNonRepeatingSubStr("一二三三二一"))
    fmt.Println(lengthOfNonRepeatingSubStr("黑化黑灰化肥灰会挥发发灰黑讳为黑灰花会回飞灰化灰黑化肥会挥发发黑灰为讳飞花回化为灰"))
}