344.反转字符串
题目要求
示例 1:
输入:s = [“h”,“e”,“l”,“l”,“o”]
输出:[“o”,“l”,“l”,“e”,“h”]
示例 2:
输入:s = [“H”,“a”,“n”,“n”,“a”,“h”]
输出:[“h”,“a”,“n”,“n”,“a”,“H”]
提示:
- 1 <= s.length <= 105
- s[i] 都是 ASCII 码表中的可打印字符
C++代码
class Solution {
public:void reverseString(vector<char>& s) {int left = 0;int right = s.size()-1;while(left<right){swap(s[left],s[right]);left++;right--;}}
};
运行截图
541.反转字符串ii
题目要求
示例 1:
输入:s = “abcdefg”, k = 2
输出:“bacdfeg”
示例 2:
输入:s = “abcd”, k = 2
输出:“bacd”
提示:
1 <= s.length <= 104
s 仅由小写英文组成
1 <= k <= 104
解题思路
这里使用的代码随想录的方法:
在遍历字符串的过程中,只要让 i += (2 * k),i 每次移动 2 * k ,然后判断本次移动后距离(使用当前位置i去加上k;i + k <= s.size()),如果是小于等于字符串最后的位置,说明此时的剩余空间大于或等于k,根据题意反转前k个字符。如果大于,则说明此时剩余空间不够k,根据题意,保持原样。
C++代码
class Solution {
public:string reverseStr(string s, int k) {for(int i=0;i<s.size();i+=(2*k)){//如果i+k<=s.size(),说明此时距离(就是离字符串s的最后位置的距离)大于k。所以直接反转前k个if (i + k <= s.size()) {reverse(s.begin()+i,s.begin()+i+k);continue;}//无法满足if条件(说明剩余字符少于 k 个)。不会执行continue,将剩下的全部反转。reverse(s.begin()+i,s.end());}return s;}
};