要求:
给定一个字符串和一个偏移量,根据偏移量旋转字符串(从左向右旋转)
示例:
对于字符串 "abcdefg"
.
offset=0 => "abcdefg" offset=1 => "gabcdef" offset=2 => "fgabcde" offset=3 => "efgabcd"
1 package main 2 3 import "fmt" 4 5 /** 6 * 给定一个字符串和一个偏移量,根据偏移量旋转字符串(从左向右旋转) 7 * 字符串"abcdefg" 8 * offset=0 => "abcdefg" 9 * offset=1 => "gabcdef" 10 * offset=2 => "fgabcde" 11 * offset=3 => "efgabcd" 12 */ 13 func main() { 14 var offset int = 3 15 var str = []byte{'a', 'b', 'c', 'd', 'e', 'f', 'g'} 16 res := strrev(str, offset) 17 fmt.Println(string(res)) 18 19 } 20 21 func strrev(str []byte, offset int) []byte { 22 //处理异常情况 23 if offset <= 0 { 24 return str 25 } 26 lstr := len(str) 27 if lstr == 0 { 28 return str 29 } 30 31 //翻转(每次pop最后一个元素,然后push到第一个元素前面) 32 for i:=0;i<offset%lstr;i++ { 33 tmp := str[lstr-1]//去最后一个元素 34 j := lstr - 2 35 for j >= 0 {//除了最后一个元素之外,其它元素均向后移动一个位置 36 str[j+1] = str[j] 37 j-- 38 } 39 str[0] = tmp 40 } 41 return str 42 }