旋转字符串
给定一个字符串和一个偏移量,根据偏移量旋转字符串(从左向右旋转)
样例
对于字符串
"abcdefg"
.offset=0 => "abcdefg" offset=1 => "gabcdef" offset=2 => "fgabcde" offset=3 => "efgabcd"
挑战
在数组上原地旋转,使用O(1)的额外空间
(1)Python程序:
class Solution:
def rotateString(self, str, offset):
a=str.copy()
j=0
if len(str)==0:
return
offset%=len(str)
for i in range(len(str)-offset,len(str)):
str[j]=a[i]
j+=1
for i in range(0,len(str)-offset):
str[j]=a[i]
j+=1
在Python中,对象赋值实际上是对象的引用。
- 若使用直接赋值(a=str),原始对象str改变,被赋值的a也会改变;
- 浅拷贝copy,没有拷贝子对象 a=str.copy;
- 深拷贝deepcopy,包含子对象的拷贝 from copy import deepcopy / a=deepcopy(str);
(2)C++程序:
class Solution {
public:
void rotateString(string &str, int offset) {
string a=str;
int i,j=0;
if(str.size()==0)
{
return;
}
offset%=a.size();
for(i=str.size()-offset;i<str.size();i++)
{
str[j++]=a[i];
}
for(i=0;i<str.size()-offset;i++)
{
str[j++]=a[i];
}
}
};