网站建设开发案例教程视频教程,全国企业信息官网网站,wordpress远程上传媒体文件夹,广州市官网网站建设多少钱目录leetcode 344.反转字符串1、题目2、思考leetcode 541. 反转字符串 II1、题目2、思考leetcode 344.反转字符串
1、题目 2、思考
典型的双指针解法#xff1a; 一个从前往后#xff0c;一个从后往前#xff0c;指针对应的交换即可。
class Solution {
public:void reve… 目录leetcode 344.反转字符串1、题目2、思考leetcode 541. 反转字符串 II1、题目2、思考 leetcode 344.反转字符串
1、题目 2、思考
典型的双指针解法 一个从前往后一个从后往前指针对应的交换即可。
class Solution {
public:void reverseString(vectorchar s) {int start0;int ends.size()-1;if(end -1) return ;while(startend){char tmp s[start];s[start]s[end];s[end] tmp;start;end--;}}
};leetcode 541. 反转字符串 II
1、题目 2、思考
交换的基础部分还是和双指针有关主要增加了逻辑上的复杂程度。 我的逻辑描述如下 1、获取字符串长度(s_size )、并按照2k来划分组数(group_nums )并且计算剩下来的不能组成一组的元素的个数(left_nums ) 2、将翻转包装成函数只要输入start 和end值即可 3、循环对组内的元素进行按照题目中的描述翻转确定start 为该组第一个元素end为start加上k保证前k个元素翻转 4、对剩下的元素个数进行判断 5、如果剩余字符小于k个start (group_nums) * 2 * kend为s最后一个字符 6、如果剩余字符小于2k个start (group_nums) * 2 * kendstartk
class Solution {
public:void myreverse(string s, int start, int end){while (start end){char tmp s[start];s[start] s[end];s[end] tmp;start;end--;}}string reverseStr(string s, int k) {int s_size s.size();int group_nums s_size / (2 * k);int count group_nums;int left_nums s_size - 2 * k * group_nums;while (count 0){int start (count - 1) * 2 * k;int end start k - 1;myreverse(s, start, end);count--;}//剩下字符翻转if (left_nums k){int start (group_nums) * 2 * k;int end s_size - 1;myreverse(s, start, end);}else if (left_nums 2 * k){int start (group_nums) * 2 * k;int end start k - 1;myreverse(s, start, end);}return s;}
};