题目描述
汇编语言中有一种移位指令叫做循环左移(ROL),现在有个简单的任务,就是用字符串模拟这个指令的运算结果。对于一个给定的字符序列S,请你把其循环左移K位后的序列输出。例如,字符序列S=”abcXYZdef”,要求输出循环左移3位后的结果,即“XYZdefabc”。是不是很简单?OK,搞定它!
class Solution:
def LeftRotateString(self, s, n):
# write code here
return s[n:]+s[:n]
当然,这道题想考的肯定不是这个,只不过python不支持对str的更改。
思路是这样的,因为n个左移相当于把s分为X和Y。
那么利用类似于转置的性质
s1=XTYTs1=XTYT
表示转置,前后调换顺序。 那么
s2=(XTYT)T=YXs2=(XTYT)T=YX
。 举例,s=1234567,n=3,
那么X=123,Y=4567
XT=321,YT=7654XT=321,YT=7654
s2 =4567123。
别人写的例子:
class Solution {
public:
string LeftRotateString(string str, int n)
{
int len = str.size();
if(len == 0) return str;
n %= len;
for(int i = 0, j = n - 1; i < j; ++i, --j) swap(str[i], str[j]);
for(int i = n, j = len - 1; i < j; ++i, --j) swap(str[i], str[j]);
for(int i = 0, j = len - 1; i < j; ++i, --j) swap(str[i], str[j]);
return str;
}
};
631

被折叠的 条评论
为什么被折叠?



