解题思路
就好比压路机,向前开和向后开,其实接触到地面的部分都是负重轮下面的那几节履带,看最后哪几节履带接触到地面。
假设最开始压路机履带上面印着如下字母: oyohimoy
m ⊙⊙⊙⊙ o
i ⊙⊙⊙ h
hoyomi
那么最开始碾压的便是hoyomi。
当压路机向前行进或者向后倒退,履带转了无数圈,mihoyo(strlen := len(str)=6)被无数次碾压,假设最后停留的几个字母为mihoyo,其实就相当于向前行进了5个字母(strlen+step(5)),或者相当于倒退了(strlen+step(-1)),假设两个履带长度为mihoyo拼接一块,即mihoyomihoyo(strlen=12),其中接地长度为6。
那么假设起始点为拼接点m字符处,***向前(左移),***向后(右移),接地(截取)omihoy到接地(截取)mihoyo,即可表现所有状态
([-5,1],[-4,2],[-3,3],[-2,4],[-1,5],[0,6])
那么,抽象化为切片,拼接之后,截取所需位置返回即可,代码如下:
代码
func stringShift(s string, shift [][]int) string {
step := 0
strlen := len(s)
for _,v1 := range shift{
if (v1[0] == 0){
step += v1[1]
} else {
step -= v1[1]
}
}
step = step%strlen
if (step < 0){
return string([]byte((s+s)[strlen+step:strlen*2+step]))
} else if (step == 0){
return s
} else {
return string([]byte((s+s)[step:strlen+step]))
}
}
如果不给我出纳西妲满命,那么就让mihoyo无数次被送去二次元吧,这可是赌上游戏生涯的700抽
<( ̄ ﹌  ̄)>