双指针收缩
1 class Solution { 2 public: 3 void reverseString(vector<char>& s) { 4 int l = 0,r = s.size()-1; 5 while(l < r){ 6 char tmp = s[l]; 7 s[l] = s[r]; 8 s[r] = tmp; 9 l++; 10 r--; 11 } 12 } 13 };
1 class Solution { 2 public: 3 string reverseStr(string s, int k) { 4 int n = s.size(); 5 for(int i = 0; i < n; i+=2*k){ 6 int l = i; 7 int r = min(i+k-1, n-1); 8 while(l < r){ 9 char tmp = s[l]; 10 s[l] = s[r]; 11 s[r] = tmp; 12 l++; 13 r--; 14 } 15 } 16 return s; 17 } 18 };
统计数字个数,然后扩容
#include<iostream> using namespace std; int main(){ string s; while(cin >> s){ int count = 0,sOldSize = s.size(); // 数字的个数 for(int i = 0; i < sOldSize; i++){ if(s[i] >= '0' && s[i] <= '9') count++; } // 扩充字符串s的大小,也就是每个数字替换成"number"之后的大小 s.resize(s.size() + count * 5); int sNewSize = s.size(); // 从后先前将数字替换为"number" for (int i = sNewSize - 1, j = sOldSize - 1; j < i; i--, j--) { if (s[j] > '9' || s[j] < '0') { s[i] = s[j]; } else { s[i] = 'r'; s[i - 1] = 'e'; s[i - 2] = 'b'; s[i - 3] = 'm'; s[i - 4] = 'u'; s[i - 5] = 'n'; i -= 5; } } cout << s << endl; } return 0; }
先把整个字符串反转,然后将空格间的单个单词反转,最后去掉多余的空格
class Solution { public: // 删除多余空格. void removeExtraSpace(string& s){ int slow = 0; int fast = 0; // 删除前面的空格. while(s.size() >0 && fast < s.size() && s[fast] == ' '){ fast++; } // 去掉中间多余空格. for(;fast<s.size();fast++){ if(fast-1 >0 && s[fast-1] == s[fast] && s[fast]==' '){ continue; }else{ s[slow++] = s[fast]; } } // 去掉末尾空格. if(slow-1 >0 && s[slow-1]==' '){ s.resize(slow-1); }else{ s.resize(slow); } } string reverseWords(string s) { reverse(s.begin(), s.end()); int index = 0; for(int i = 0; i < s.size(); i++){ if(s[i] == ' '){ reverse(s.begin()+index, s.begin()+i); index = i+1; } } reverse(s.begin()+index, s.end()); removeExtraSpace(s); return s; } };
先整体反转再部分反转
1 #include<iostream> 2 #include<algorithm> 3 using namespace std; 4 int main(){ 5 int k; 6 string s; 7 cin >> k; 8 cin >> s; 9 int len = s.size(); 10 reverse(s.begin(),s.end());// 整体反转 11 reverse(s.begin(),s.begin()+k);//部分反转 12 reverse(s.begin()+k,s.end()); 13 std::cout << s << std::endl; 14 return 0; 15 }
浙公网安备 33010602011771号