151.翻转字符串里的单词
题目链接/文章讲解/视频讲解:代码随想录
class Solution {
public:
void reverse(string& s, int start, int end){
for (int i = start, j = end; i < j; i++, j--) {
swap(s[i], s[j]);
}
}
void removeExtraSpaces(string& s) {
int slow = 0;
for (int i = 0; i < s.size(); ++i) { //
if (s[i] != ' ') {
if (slow != 0) s[slow++] = ' ';
while (i < s.size() && s[i] != ' ') {
s[slow++] = s[i++];
}
}
}
s.resize(slow);
}
string reverseWords(string s) {
removeExtraSpaces(s);
reverse(s, 0, s.size() - 1);
int start = 0;
for (int i = 0; i <= s.size(); ++i) {
if (i == s.size() || s[i] == ' ') {
reverse(s, start, i - 1);
start = i + 1;
}
}
return s;
}
};
首先要考虑这种情况 “ aabb ccdd ”“”这种单词前后都有空格的情况,要先去空格首先要定义两个指针一个是慢指针一个是i首先进入一个for循环然后进行判断[i]是不是空格如果不是则进入if语句然后再进行判断慢指针等不等于0如果不等于则根据慢指针赋个空格,反之进入while循环,循环语句里面判断i要小于数组的大小的同时还有判断是[i]是单词才行最后就进行[slow++]=[i++]这个就是删除空格的操作之后需要交换的换其实交换两次之后就可以有这种效果但是要加上判断
卡码网:55.右旋转字符串
题目链接/文章讲解:
#include<iostream>
#include<algorithm>
using namespace std;
int main() {
int n;
string s;
cin >> n;
cin >> s;
int len = s.size();
reverse(s.begin(), s.end());
reverse(s.begin(), s.begin() + n);
reverse(s.begin() + n, s.end());
cout << s << endl;
}
根据长度n来进行翻转就行