題目?151. 反轉字符串中的單詞 - 力扣(LeetCode)
class Solution {
public:// 移除多余空格void moveSpace(string& s) {// 定義快慢指針int slow = 0;int fast = 0;// 刪除前導空格while (s.size() > 0 && fast < s.size() && s[fast] == ' ') {fast++;}// 刪除中間空格while (fast < s.size()) {while ((fast - 1) > 0 && s[fast - 1] == s[fast] && s[fast] == ' ') {fast++;}if (fast < s.size()) {s[slow++] = s[fast++];}}// 刪除尾隨空格,該改變sizeif (s[slow - 1] == ' ') {s.resize(slow - 1);} else {s.resize(slow);}}void reverseWord(string& s, int left, int right) {while (left < right) {swap(s[left++], s[right--]);}}string reverseWords(string s) {moveSpace(s);// 整體反轉字符串reverseWord(s, 0, s.size()-1);// 反轉單詞int left=0;int right=0;while(right<=s.size()){if(right==s.size()||s[right]==' '){reverseWord(s,left,right-1);left=right+1;}right++;}return s;}
};
題目55. 右旋字符串(第八期模擬筆試) (kamacoder.com)
#include<iostream>
#include<algorithm>
using namespace std;int main()
{string s;int k=0;//左旋位數//分成兩個部分,整體反轉,兩部分分別反轉cin >> k >> s;reverse(s.begin(), s.end());reverse(s.begin(), s.begin() + k);reverse(s.begin() + k, s.end());cout << s;return 0;
}
最后
要記住旋轉反轉單詞,右旋字符串,都可以轉換為先整體reverse,再局部reverse恢復,去除空格,注意resize使用,還有翻轉空間