151. 翻转字符串里的单词
- 首先明确的是在c++中stl已经封装好了一个string类供使用
- 主要的思路:
方法:双指针
- 倒序遍历字符串s,记录单词左右边界i,j;
- 每确定一个单词的边界,则将其添加至单词列表res;
- 最终,将单词列表拼接为字符串,并返回即可。
string reverseWords(string s){
string res;
if(s.length()==0) return res;
int right = s.length() -1;
# 开始搜索
# 当right<=退出循环,此时整个字符串遍历完
while(right>=0){
# 1.消除末尾多余空格
while(right>=0 && s[right]==' ') right--;
if(right<0) break;
# 2.已经定位到末尾第一个单词尾部字母处
int left = right;
# 3.扫描单词
while(left>=0 && s[left]!=' ') left--;
# 4.添加单词,尾部空格
res+=s.substr(left+1, right-left);
res+=' ';
# 准备加入下一个单词
right = left;
}
// 去除尾部的空格
if(!res.empty())
res.pop_back();
return res;
}
剑指 Offer 58 - II. 左旋转字符串
字符串的左旋转操作是把字符串前面的若干个字符转移到字符串的尾部。请定义一个函数实现字符串左旋转操作的功能。比如,输入字符串"abcdefg"和数字2,该函数将返回左旋转两位得到的结果"cdefgab"。
/*
string reverseLeftWords(string s, int n) {
string res;
int length = s.length();
if(length==0) return res;
n = n % length;
res+=s.substr(n, length-n);
res+=s.substr(0, n);
return res;
}*/
// 若面试中规定不能使用切片函数咋办
string reverseLeftWords(string s, int n){
string ans = "";
int length = s.length();
n = n%length;
for(int i = n; i<length; i++) ans+=s[i];
for(int i = 0; i<n; i++) ans+=s[i];
return ans;
}