第一题:
原题链接:151. 反转字符串中的单词 - 力扣(LeetCode)
思路:
先把首尾的空格去掉:找到第一个不是空格的字符,找到最后一个不是空格的字符。substr字符串为新的字符串t。
使用双指针,一根用来移动寻找每个单词的头,一根用于指向每个单词的末尾。然后将头指针和尾指针的字符添加到结果字符串中,其中头指针遇到空格时要跳过。
最后返回的时候最后一定会多一个空格,需要将空格去掉
代码如下:
class Solution {
public:string reverseWords(string s) {int first = 0;while(s[first] == ' '){first++;}int end = s.size() - 1;while(s[end] == ' '){end--;}string t = s.substr(first, end - first + 1);string res;int i = t.size() - 1, j = t.size() - 1;while(i >= 0){while(i >= 0 && t[i] != ' '){i--;}for(int m = i + 1; m <= j; m++){res += t[m];} res += ' ';while(i >= 0 && t[i] == ' '){i--;}j = i;}return res.substr(0, res.size() - 1);}
};
第二题:
原题链接:55. 右旋字符串(第八期模拟笔试) (kamacoder.com)
思路:
将整个字符串反转,然后再对前n个反转和对n之后的字符反转。
代码如下:
#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); // 先反转前一段,长度nreverse(s.begin() + n, s.end()); // 再反转后一段cout << s << endl;}