2014-11-08 1 views
3

Я хочу что-то вроде:Каков наилучший способ получить циклические подстроки

var peptide = "LENQ" 

peptide[2:3] -> NQ 
peptide[2:4] -> NQL 
peptide[2:5] -> NQLE 

Что является лучшим способом в пути, чтобы сделать это? Может быть, есть библиотечная функция для ее получения или мне нужно написать ее самостоятельно?

ответ

4

Например,

package main 

import (
    "fmt" 
    "unicode/utf8" 
) 

func cyclicSubstrings(str string) []string { 
    n := utf8.RuneCountInString(str) 
    substrs := make([]string, 0, n*n) 
    cycles := str + str 
    for i := range str { 
     cycle := cycles[i : i+len(str)] 
     for j, r := range cycle { 
      substrs = append(substrs, cycle[:j+utf8.RuneLen(r)]) 
     } 
    } 
    return substrs 
} 

func main() { 
    peptide := "LENQ" 
    fmt.Println(cyclicSubstrings(peptide)) 
} 

Выход:

 
[L LE LEN LENQ E EN ENQ ENQL N NQ NQL NQLE Q QL QLE QLEN] 
Смежные вопросы