单序列双指针篇--罗姆的刷题记录
单序列双指针篇--罗姆的刷题记录

单序列双指针篇

反转字符串

本质是相向双指针。

344. 反转字符串

code
class Solution {
public:void reverseString(vector<char>& s) {int n = s.size();int l = 0, r = n - 1;char tmp;while (l < r) {tmp = s[r];s[r] = s[l];s[l] = tmp;l++;r--;}return;}
};

3794. 反转字符串前缀

给你一个字符串 s 和一个整数 k。
反转 s 的前 k 个字符,并返回结果字符串。

code
class Solution {
public:string reversePrefix(string s, int k) {for (int l = 0, r = k - 1; l < r; l++, r--) {swap(s[l], s[r]);}return s;}
};

2000. 反转单词前缀 1199

给一个下标从0开始的字符串word 和一个字符 ch 。
找出ch第一次出现的下标i, 反转word 中从下标0开始, 到下标i 结束的那段字符。不存在ch 则不反转。

code
class Solution {
public:string reversePrefix(string word, char ch) {int i = word.find(ch);if (i != string::npos) {for (int l = 0, r = i; l < r; l++, r--) {swap(word[l], word[r]);}}return word;}
};