• 最长重复字符串题解 golang


    最长重复字符串题解

    package main
    
    import (
    	"fmt"
    	"strings"
    )
    
    type Index map[int]int
    
    type Counter map[string]Index
    
    var 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
    ", 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
    ", k, len(v))
    	}
    }
    
  • 相关阅读:
    day35
    Audio Unit 基础
    Audio Unit 介绍
    音频PCM编码
    iOS libyuv
    FFmpeg AVPacket
    FFmpeg AVCodec
    FFmpeg编译iOS静态库
    iOS-Cocoapods更新不及时
    iOS-读取txt文件中文乱码
  • 原文地址:https://www.cnblogs.com/morya/p/9301582.html
Copyright © 2020-2023  润新知