344.反转字符串 | 541. 反转字符串II | 剑指Offer 05.替换空格 | 151.翻转字符串里的单词 | 剑指Offer58-II.左旋转字符串

58 阅读1分钟

反转字符串

题目:leetcode.cn/problems/re…

思路:利用双指针,一个指向第一个元素,叫做pre,另一个指向最后一个元素,叫做post,交换两个位置的值,再pre++,post--,直到post小于pre

 class Solution {
 public:
     void reverseString(vector<char>& s) {
         int n = s.size(); // vector数组长度
         int pre = 0, post = n-1;
         while (pre < post)
         {
             char item = s[pre];
             s[pre] = s[post];
             s[post] = item;
             pre++;
             post--;
         }
     }
 };

反转字符串II

题目:leetcode.cn/problems/re…

思路:首先让声明一个变量,让它指向第一个元素的位置,在判断一下从该位置到字符串的尾部之前有多少个字符,如果剩余字符大于k个,就把这k个字符反转,然后再让变量指向后移动2 * k字符对应的位置,否则,将剩余字符串全部反转

 class Solution {
 public:
     string reverseStr(string s, int k) {
         int n = s.length();
         int i = 0;
         while (i < n) 
         {
             int pre = 0 + i, post = k - 1 + i;
             if (i + k <= n) // 剩余字符大于k个
             {
                 while (pre < post)
                 {
                     char item = s[pre];
                     s[pre] = s[post];
                     s[post] = item;
                     pre++;
                     post--;
                 }
             }
             else // 剩余字符小于k个
             {
                 post = n - 1;
                 while (pre < post)
                 {
                     char item = s[pre];
                     s[pre] = s[post];
                     s[post] = item;
                     pre++;
                     post--;
                 }
             }
             i += 2 * k;
         }
        
         return s;
     }
 };

替换空格

题目描述:实现一个函数,把字符串 s 中的每个空格替换成 %20

C++中,string是一个可变类型,因此可以在遍历字符串的过程中实现修改。

代码

 class Solution {
 public:
     string replaceSpace(string s) {
         int n = s.size();
         for (int i = 0; i < n; i++)
         {
             if (s[i] == ' ')
             {
                 s.append("**");  // add two placeholder.
                 s[i] = '%';
                 int j;
                 for (j = n + 1; j > i + 2; j--)
                 {
                     s[j] = s[j - 2];
                 }
                 s[i + 1] = '2';
                 s[i + 2] = '0';
                 n += 2;  // important.
             }
         }
         return s;
     }
 };

翻转字符串里的单词

左旋转字符串