您的位置:首页 > 职场人生

【剑指offer】6.3知识迁移能力——面试题42:翻转单词顺序VS左旋转字符串

2016-01-15 17:14 781 查看


左旋转字符串
//题目描述

//汇编语言中有一种移位指令叫做循环左移(ROL),现在有个简单的任务,就是用字符串模拟这个指令的运算结果。对于一个给定的字符序列S,请你把其循环左移K位后的序列输出。例如,字符序列S=”abcXYZdef”,要求输出循环左移3位后的结果,即“XYZdefabc”。是不是很简单?OK,搞定它!
class Solution {
public:
string LeftRotateString(string str, int n) {
if(n==0)return str;
int l=str.size();
if(l==0)return str;
n=(n%l+l)%l;
return str.substr(n,l-n)+str.substr(0,n);
}
};
翻转单词顺序
//题目描述

//牛客最近来了一个新员工Fish,每天早晨总是会拿着一本英文杂志,写些句子在本子上。同事Cat对Fish写的内容颇感兴趣,有一天他向Fish借来翻看,但却读不懂它的意思。例如,“student. a am I”。后来才意识到,这家伙原来把句子单词的顺序翻转了,正确的句子应该是“I am a student.”。Cat对一一的翻转这些单词顺序可不在行,你能帮助他么?
#include<iostream>
#include<string>
using namespace std;
class Solution {
public:
string ReverseSentence(string str) {
int n=str.size();
if(n==0)return str;
bool flag=false;
string s="";
string tmp="";
for(int i=0;i<n;i++){
if(str[i]==' '){
if(flag)s=tmp+s;
flag=false;
tmp="";
s=str[i]+s;
}else{
tmp+=str[i];
flag=true;
}
}
s=tmp+s;
return s;
}
};
int main(){
string s="student. a am I";
Solution test=Solution();
cout<<test.ReverseSentence(s)<<endl;
//system("pause");
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: