最長重複字串題解 golang

來源:互聯網
上載者:User

最長重複字串題解

package mainimport (    "fmt"    "strings")type Index map[int]inttype Counter map[string]Indexvar c = make(Counter)func setRecord(match string, index int) {    i, ok := c[match]    if !ok {        i = make(Index)        c[match] = i        return    }    i[index]++}func filterOverlap() {    var keys []string    for k := range c {        keys = append(keys, k)    }    for _, xkey := range keys {        for k := range c {            if strings.HasPrefix(xkey, k) && xkey != k {                // fmt.Printf("delete key=%v\n", k)                delete(c, k)                continue            }        }    }}func calc(sample []byte) {    var i, n, xi, xj, yi, yj int    n = len(sample)    var a, b string    for i = 0; i < n; i++ {        for xi = i; xi < n-1; xi++ {            for xj = xi + 1; xj < n; xj++ {                for yi = xj + 1; yi < n; yi++ {                    yj = yi + (xj - xi)                    a = string(sample[xi:xj])                    b = string(sample[yi:yj])                    if a == b {                        setRecord(a, xi)                        setRecord(b, yi)                    }                }            }        }    }}func main() {    var s = "12342342341234"    calc([]byte(s))    filterOverlap()    for k, v := range c {        fmt.Printf("%v:%v\n", k, len(v))    }}
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.