1.问题描述
定义字符串的左旋转操作:把字符串前面的若干个字符移动到字符串的尾部。如把字符串abcdef左旋转2位得到字符串cdefab。要求对长度为n的字符串操作的时间复杂度为O(n),空间复杂度为O(1)。
2.解题思路
把字符串看成有两段组成的,记为XY。左旋转相当于要把字符串XY变成YX。
首先对X和Y两段分别进行翻转操作,这样就能得到XTYT。T代表翻转操作,例如X=ab,Y=cdef,则XT=ba,YT=fedc)
接着再对XTYT进行翻转操作,得到(XTYT)T=(YT)T(XT)T=YX。正好是我们期待的结果。
欢迎大家转发,一起传播知识和正能量,帮助到更多人。辛苦大家转发时注明出处(也是咱们公益编程交流群的入口网址):http://liujingwei.cn