1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56
| package main
import ( "fmt" )
type list struct { i,start int } //获取不重复的数据和内容 func repeatSubstr(s string) (int,[]list) { //创建一个map将字符串作为key 索引作为值 setmap := make(map[rune]int) //定义开始的位置 start := 0 //记录最大长度 length := 0 //记录i,start 用户获取字符串 var newlist list var lists []list //遍历执行操作 for i, value := range []rune(s) { //判断map中是否已经存在这个字符 lastk, ok := setmap[value] //start位置定义。如果存在定义它下一个值作为一个新的start位置 if ok && lastk >= start { start = lastk + 1 } //length长度计算 if i-start+1 > length { length = i - start + 1 } //存入setmap setmap[value] = i //记录 newlist.i = i newlist.start = start lists= append(lists,newlist) } return length,lists } func main() { s := "我爱我你我他" length ,list := (repeatSubstr(s)) fmt.Println("获取长度",length) bytes := []rune(s) for _,row := range list { //将满足条件的字符串拿去出来 if row.i-row.start+1 == length{ for i := row.start;i<= row.i ;i++ { fmt.Print(string(bytes[i])) } fmt.Println() } } }
|