此题链接:https://www.lintcode.com/problem/rotate-string/description?_from=cat
分析:
1:暴力求解法,这是最容易想到的解法,思路是确定好转换的那个位置i,前面的字符整体向后推移出一个位置出来(k循环),空出来的位置储存该位置的字符串。
解释:i为需要提到前面位置的字符,j位置储存i中的字符
void rotateString(string &str, int offset) { // write your code here int length=str.size(); if(!offset||!length) return ; int offpos=offset%length; int j=0; char exchange; for(int i=length-offpos;i<length;i++) { exchange=str[i]; for(int k=i;k>=j;k--) { str[k]=str[k-1]; } str[j]=exchange; j++; } }
这个只需要0(1)的空间,但是时间复杂度还是蛮高的,中间的重复移动太多了,暂时还没想到好的方法去优化移动的步数,改天在更新。