344.反转字符串
思路
双指针解法
代码解读
(1)swap(s[i], s[j]);可以交换s[i],和s[j]。(s是一个数组)
(2)void reverseString(vector<char>& s)
函数定义的时候使用的是引用传递的方式,所以函数调用的时候可以如下操作
vector<char> str;
reverseString(str);
传递方式 | 函数定义 | 函数调用 | 函数内对a修改的影响 |
---|---|---|---|
值传递 | fun(int a) | fun(x) | 外部x不变 |
指针传递 | fun(int *a) | fun(&x) | 外部x同步更改 |
引用传递 | fun(int &a) | fun(x) | 外部x同步更改 |
541. 反转字符串II
题目:剑指Offer 05.替换空格
思路
双指针解法
- 遍历字符串大小,定义一个count变量,计算空格个数
- 扩充字符串大小,扩充count个大小
- 定义双指针,i指针指向原字符串长度的末尾,j指向扩充后的字符串末尾
- 循环查找
- 如果字符串s[i] != ’ ',则s[j] = s[]i;
- 否则,s[j] = ‘0’,s[j-1]=‘2’,s[j-2]=‘%’,j=j-2
- 循环条件:i<j
代码解读
(1)扩充字符串/数组大小
string s = "ssdfsdf";
s.resize(s.size() + 2 * 2);
题目:剑指Offer58-II.左旋转字符串
思路
代码解读
(1)C++反转函数reverse
string s;
reverse(s.begin(), s.begin() + n); n表示要反转的长度
reverse(s.begin() + n, s.end()); s.end表示要反转的结尾为止
reverse(s.begin(), s.end());
第一个参数:要反转的起始位置