43.题目描述
汇编语言中有一种移位指令叫做循环左移(ROL),现在有个简单的任务,就是用字符串模拟这个指令的运算结果。对于一个给定的字符序列S,请你把其循环左移K位后的序列输出。例如,字符序列S=”abcXYZdef”,要求输出循环左移3位后的结果,即“XYZdefabc”。是不是很简单?OK,搞定它!
思路:XY -> YX
(XT YT)T==YX 每个子串反转后,再总体反转。
class Solution {
public:
string LeftRotateString(string str, int n) {
if(str.empty())
return str;
n=n%str.size();
for(int i=0,j=n-1;i<j;++i,--j)//X->XT
swap(str[i],str[j]);
for(int i=n,j=str.size()-1;i<j;++i,--j)//Y->YT
swap(str[i],str[j]);
for(int i=0,j=str.size()-1;i<j;++i,--j)XTYT->YX
swap(str[i],str[j]);
return str;
}
};
# -*- coding:utf-8 -*-
class Solution:
def LeftRotateString(self, s, n):
if len(s)==0:
return s
n=n%len(s)
return s[n:]+s[:n]
# write code here
# -*- coding:utf-8 -*-
class Solution:
def LeftRotateString(self, s, n):
# write code here
length=len(s)
if length==0:
return s
n=n%length
s=s[:n][::-1]+s[n:][::-1]
s=s[::-1]
return s
44.题目描述
牛客最近来了一个新员工Fish,每天早晨总是会拿着一本英文杂志,写些句子在本子上。同事Cat对Fish写的内容颇感兴趣,有一天他向Fish借来翻看,但却读不懂它的意思。例如,“student. a am I”。后来才意识到,这家伙原来把句子单词的顺序翻转了,正确的句子应该是“I am a student.”。Cat对一一的翻转这些单词顺序可不在行,你能帮助他么?
class Solution {
public:
void reverse(string &str,int start,int end)
{
for(int i=start,j=end;i<j;++i,--j)
swap(str[i],str[j]);
}
string ReverseSentence(string str) {
if(str.empty())
return str;
reverse(str,0,str.size()-1);
int start=0;
while(start<str.size()) {
while(start<str.size() && str[start]==' ')//过滤空格
++start;
int temp=start;
while(start<str.size() && str[start]!=' ')//获取字符长度
++start;
reverse(str,temp,start-1);
}
return str;
}
};
# -*- coding:utf-8 -*-
class Solution:
def ReverseSentence(self, s):
if len(s)==0:
return s
s=s[::-1]
length=len(s)
start=0
while start<length:
while start<length and s[start]==' ':
start+=1
temp=start
while start<length and s[start]!=' ':
start+=1
s=s[:temp]+s[temp:start][::-1]+s[start:]
return s
# write code here